]> granicus.if.org Git - clang/commitdiff
Accept the C++0x override control keywords as an extension in C++98. This is OK since...
authorAnders Carlsson <andersca@mac.com>
Sat, 22 Jan 2011 23:01:49 +0000 (23:01 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 22 Jan 2011 23:01:49 +0000 (23:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124048 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticParseKinds.td
include/clang/Sema/DeclSpec.h
lib/Parse/ParseDeclCXX.cpp

index 2ef92b69d8a7fcb0fd0b3a0c3629df97e118848e..ee1bb2cdfbffa60352556969500b8fd3afca3baa 100644 (file)
@@ -390,6 +390,9 @@ def warn_deleted_function_accepted_as_extension: ExtWarn<
   "deleted function definition accepted as a C++0x extension">, InGroup<CXX0x>;
 
 // C++0x override control
+def ext_override_control_keyword : Extension<
+  "'%0' keyword accepted as a C++0x extension">, InGroup<CXX0x>;
+
 def err_duplicate_virt_specifier : Error<
   "class member already marked '%0'">;
 def err_duplicate_class_virt_specifier : Error<
index dced53f471bc7f10bde575829af0328d6172ce6e..65c95dc4c68a2e0a62ce56165e138c7e35a8a33a 100644 (file)
@@ -1492,13 +1492,12 @@ public:
   bool isNewSpecified() const { return Specifiers & VS_New; }
   SourceLocation getNewLoc() const { return VS_newLoc; }
 
+  static const char *getSpecifierName(Specifier VS);
+
 private:
   unsigned Specifiers;
 
   SourceLocation VS_overrideLoc, VS_finalLoc, VS_newLoc;
-
-  static const char *getSpecifierName(Specifier VS);
-
 };
 
 /// ClassVirtSpecifiers - Represents a C++0x class-virt-specifier-seq.
@@ -1521,12 +1520,12 @@ public:
   bool isExplicitSpecified() const { return Specifiers & CVS_Explicit; }
   SourceLocation getExplicitLoc() const { return CVS_explicitLoc; }
 
+  static const char *getSpecifierName(Specifier CVS);
+
 private:
   unsigned Specifiers;
 
   SourceLocation CVS_finalLoc, CVS_explicitLoc;
-
-  static const char *getSpecifierName(Specifier CVS);
 };
 
 } // end namespace clang
index 9a23cf1be5cf44af4e84ce0411e32c06280c8d68..4d16f033be79303f5b36f09a82c8ac950e430bca 100644 (file)
@@ -1272,7 +1272,7 @@ void Parser::HandleMemberFunctionDefaultArgs(Declarator& DeclaratorInfo,
 ///         final
 ///         new
 VirtSpecifiers::Specifier Parser::isCXX0XVirtSpecifier() const {
-  if (!getLang().CPlusPlus0x)
+  if (!getLang().CPlusPlus)
     return VirtSpecifiers::VS_None;
 
   if (Tok.is(tok::kw_new))
@@ -1316,6 +1316,9 @@ void Parser::ParseOptionalCXX0XVirtSpecifierSeq(VirtSpecifiers &VS) {
         << PrevSpec
         << FixItHint::CreateRemoval(Tok.getLocation());
 
+    if (!getLang().CPlusPlus0x)
+      Diag(Tok.getLocation(), diag::ext_override_control_keyword)
+        << VirtSpecifiers::getSpecifierName(Specifier);
     ConsumeToken();
   }
 }
@@ -1327,7 +1330,7 @@ void Parser::ParseOptionalCXX0XVirtSpecifierSeq(VirtSpecifiers &VS) {
 ///         final
 ///         explicit
 ClassVirtSpecifiers::Specifier Parser::isCXX0XClassVirtSpecifier() const {
-  if (!getLang().CPlusPlus0x)
+  if (!getLang().CPlusPlus)
     return ClassVirtSpecifiers::CVS_None;
 
   if (Tok.is(tok::kw_explicit))
@@ -1368,6 +1371,11 @@ void Parser::ParseOptionalCXX0XClassVirtSpecifierSeq(ClassVirtSpecifiers &CVS) {
       Diag(Tok.getLocation(), diag::err_duplicate_class_virt_specifier)
        << PrevSpec
        << FixItHint::CreateRemoval(Tok.getLocation());
+
+    if (!getLang().CPlusPlus0x)
+      Diag(Tok.getLocation(), diag::ext_override_control_keyword)
+      << ClassVirtSpecifiers::getSpecifierName(Specifier);
+
     ConsumeToken();
   }
 }