From: Richard Smith Date: Fri, 14 Oct 2011 20:48:27 +0000 (+0000) Subject: -Wc++98-compat: warn on C++11 attributes and alignas. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41be673e93ed225b45479557b20ff19b3082bae8;p=clang -Wc++98-compat: warn on C++11 attributes and alignas. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141999 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index c083887584..73437b217b 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -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, DefaultIgnore; +def warn_cxx98_compat_attribute : Warning< + "attributes are incompatible with C++98">, + InGroup, DefaultIgnore; def err_cxx0x_attribute_forbids_arguments : Error< "C++11 attribute '%0' cannot have an argument list">; def err_cxx0x_attribute_requires_arguments : Error< diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index 607cb88260..4339047f1f 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -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(); diff --git a/test/SemaCXX/cxx98-compat.cpp b/test/SemaCXX/cxx98-compat.cpp index 37815d4797..f3f323f5d4 100644 --- a/test/SemaCXX/cxx98-compat.cpp +++ b/test/SemaCXX/cxx98-compat.cpp @@ -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 // expected-warning {{variadic templates are incompatible with C++98}} class Variadic1 {}; @@ -8,3 +8,6 @@ class Variadic2 {}; template // 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}}