]> granicus.if.org Git - clang/commitdiff
-Wc++98-compat: warn on C++11 attributes and alignas.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 14 Oct 2011 20:48:27 +0000 (20:48 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 14 Oct 2011 20:48:27 +0000 (20:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141999 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticParseKinds.td
lib/Parse/ParseDeclCXX.cpp
test/SemaCXX/cxx98-compat.cpp

index c0838875846e7a1753646846c98f365c6611a197..73437b217b1861ddc4520f38498128f16c4a6933 100644 (file)
@@ -371,6 +371,11 @@ def err_default_delete_in_multiple_declaration : Error<
   "'= %select{default|delete}0' is a function definition and must occur in a "
   "standalone declaration">;
 
+def warn_cxx98_compat_alignas : Warning<"'alignas' is incompatible with C++98">,
+  InGroup<CXX98Compat>, DefaultIgnore;
+def warn_cxx98_compat_attribute : Warning<
+  "attributes are incompatible with C++98">,
+  InGroup<CXX98Compat>, DefaultIgnore;
 def err_cxx0x_attribute_forbids_arguments : Error<
   "C++11 attribute '%0' cannot have an argument list">;
 def err_cxx0x_attribute_requires_arguments : Error<
index 607cb8826073933cb5fcf1536b8bfab8c30fb1f8..4339047f1f16e331f85c57eae4637d3e16149b7d 100644 (file)
@@ -2622,6 +2622,7 @@ void Parser::PopParsingClass(Sema::ParsingClassState state) {
 void Parser::ParseCXX0XAttributeSpecifier(ParsedAttributes &attrs,
                                           SourceLocation *endLoc) {
   if (Tok.is(tok::kw_alignas)) {
+    Diag(Tok.getLocation(), diag::warn_cxx98_compat_alignas);
     ParseAlignmentSpecifier(attrs, endLoc);
     return;
   }
@@ -2629,6 +2630,8 @@ void Parser::ParseCXX0XAttributeSpecifier(ParsedAttributes &attrs,
   assert(Tok.is(tok::l_square) && NextToken().is(tok::l_square)
       && "Not a C++0x attribute list");
 
+  Diag(Tok.getLocation(), diag::warn_cxx98_compat_attribute);
+
   ConsumeBracket();
   ConsumeBracket();
 
index 37815d47971c61e1cff40781fe218429e79ec93c..f3f323f5d492adbf2b48d6a65ba7a431f9466ee7 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -std=c++0x -Wc++98-compat -verify %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -Wc++98-compat -verify %s
 
 template<typename ...T>  // expected-warning {{variadic templates are incompatible with C++98}}
 class Variadic1 {};
@@ -8,3 +8,6 @@ class Variadic2 {};
 
 template<int ...I>  // expected-warning {{variadic templates are incompatible with C++98}}
 class Variadic3 {};
+
+int alignas(8) with_alignas; // expected-warning {{'alignas' is incompatible with C++98}}
+int with_attribute [[ ]]; // expected-warning {{attributes are incompatible with C++98}}