]> granicus.if.org Git - clang/commitdiff
Don't allow __attribute__((common)) in C++. PR16330.
authorEli Friedman <eli.friedman@gmail.com>
Thu, 20 Jun 2013 22:55:04 +0000 (22:55 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 20 Jun 2013 22:55:04 +0000 (22:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184493 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDeclAttr.cpp
test/SemaCXX/attr-common.cpp [new file with mode: 0644]

index cf1e6dc3ac8029dace82841f95a7ea924f40a5da..49e37faae779d26b8581cb41cfd29fa52d01c08b 100644 (file)
@@ -1826,6 +1826,8 @@ def err_format_attribute_result_not : Error<"function does not return %0">;
 def err_format_attribute_implicit_this_format_string : Error<
   "format attribute cannot specify the implicit this argument as the format "
   "string">;
+def err_common_not_supported_cplusplus : Error<
+  "common attribute is not supported in C++">;
 def warn_unknown_method_family : Warning<"unrecognized method family">;
 def err_init_method_bad_return_type : Error<
   "init methods must return an object pointer type, not %0">;
index 9a68ca5a752c5d2eef60350758d56842dc096883..a254caeff75195ced4f009e533c3cd587a65d436 100644 (file)
@@ -1746,6 +1746,12 @@ static void handleNoCommonAttr(Sema &S, Decl *D, const AttributeList &Attr) {
 
 static void handleCommonAttr(Sema &S, Decl *D, const AttributeList &Attr) {
   assert(!Attr.isInvalid());
+
+  if (S.LangOpts.CPlusPlus) {
+    S.Diag(Attr.getLoc(), diag::err_common_not_supported_cplusplus);
+    return;
+  }
+
   if (isa<VarDecl>(D))
     D->addAttr(::new (S.Context)
                CommonAttr(Attr.getRange(), S.Context,
diff --git a/test/SemaCXX/attr-common.cpp b/test/SemaCXX/attr-common.cpp
new file mode 100644 (file)
index 0000000..58b3013
--- /dev/null
@@ -0,0 +1,3 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+__attribute__((common)) int x; // expected-error {{common attribute is not supported in C++}}