]> granicus.if.org Git - clang/commitdiff
Add -Wc++98-compat warning for deduced 'auto' type specifier.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 15 Oct 2011 05:42:01 +0000 (05:42 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 15 Oct 2011 05:42:01 +0000 (05:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142057 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaType.cpp
test/SemaCXX/cxx98-compat.cpp

index 0fbf0cee0a5d70554644be7637cf167f6a902564..1fb8fb8b9750433a9a44e764981a92dbb02deac9 100644 (file)
@@ -1083,6 +1083,9 @@ def err_cannot_determine_declared_type_of_overloaded_function : Error<
     "cannot determine the type of an overloaded function">;
     
 // C++11 auto
+def warn_cxx98_compat_auto_type_specifier : Warning<
+  "'auto' type specifier is incompatible with C++98">,
+  InGroup<CXX98Compat>, DefaultIgnore;
 def err_auto_variable_cannot_appear_in_own_initializer : Error<
   "variable %0 declared with 'auto' type cannot appear in its own initializer">;
 def err_illegal_decl_array_of_auto : Error<
index 2b563a50a99fbd70b8938c7256c81986cddaee2a..d3a39967de662be35fb27465ddccee35331d665b 100644 (file)
@@ -1851,7 +1851,9 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state,
         << Error;
       T = SemaRef.Context.IntTy;
       D.setInvalidType(true);
-    }
+    } else
+      SemaRef.Diag(D.getDeclSpec().getTypeSpecTypeLoc(),
+                   diag::warn_cxx98_compat_auto_type_specifier);
   }
 
   if (SemaRef.getLangOptions().CPlusPlus &&
index d4c433e00853d816ef94d59f4b052f5b638956e8..927df1f971e991a9bc882de88fd7af686e75bf93 100644 (file)
@@ -87,3 +87,6 @@ template<typename T> using AliasTemplate = T; // expected-warning {{alias declar
 
 inline namespace N { // expected-warning {{inline namespaces are incompatible with C++98}}
 }
+
+auto auto_deduction = 0; // expected-warning {{'auto' type specifier is incompatible with C++98}}
+int *p = new auto(0); // expected-warning {{'auto' type specifier is incompatible with C++98}}