]> granicus.if.org Git - clang/commitdiff
upgrade various 'implicit int' warnings from an ext-warn to warning when not
authorChris Lattner <sabre@nondot.org>
Fri, 27 Feb 2009 18:53:28 +0000 (18:53 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 27 Feb 2009 18:53:28 +0000 (18:53 +0000)
in C89 mode.  This makes it enabled by default instead of only enabled with
-pedantic.  Clang defaults to c99 mode, so people will see this more often
than with GCC, but they can always use -std=c89 if they really want c89.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65647 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.def
lib/Sema/SemaType.cpp
test/Parser/MicrosoftExtensions.c
test/Parser/objc-forcollection-neg-2.m
test/Parser/traditional_arg_scope.c
test/Parser/typeof.c
test/Sema/address_spaces.c
test/Sema/block-literal.c
test/Sema/implicit-int.c
test/Sema/invalid-decl.c
test/Sema/invalid-struct-init.c

index 5cd8c6be967dd1ce64f0f7145d8b9d86ce3f925c..af3c8672ac1c203946a0d35b99f654cefd2d7091 100644 (file)
@@ -1413,12 +1413,14 @@ DIAG(err_collection_expr_type, ERROR,
 // Type
 DIAG(ext_invalid_sign_spec, EXTENSION,
      "'%0' cannot be signed or unsigned")
-DIAG(ext_missing_declspec, EXTENSION,
+DIAG(warn_missing_declspec, WARNING,
      "declaration specifier missing, defaulting to 'int'")
-DIAG(ext_missing_type_specifier, EXTENSION,
+DIAG(warn_missing_type_specifier, WARNING,
      "type specifier missing, defaults to 'int'")
 DIAG(err_missing_type_specifier, ERROR,
      "C++ requires a type specifier for all declarations")
+DIAG(err_missing_param_declspec, ERROR,
+     "parameter requires a declaration specifier")
 DIAG(warn_objc_array_of_interfaces, WARNING,
      "array of interface %0 should probably be an array of pointers")
 DIAG(ext_c99_array_usage, EXTENSION,
index d1dcca6cf12c7a501da58fb25dc0a1021cd61c7e..bfbf8ab9529abb0701692403edff78d9dedb6301 100644 (file)
@@ -74,10 +74,10 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
     // parser already though by it pretending to have seen an 'int' in this
     // case.
     if (getLangOptions().ImplicitInt) {
-      if ((DS.getParsedSpecifiers() & (DeclSpec::PQ_StorageClassSpecifier |
-                                       DeclSpec::PQ_TypeSpecifier |
-                                       DeclSpec::PQ_TypeQualifier)) == 0)
-        Diag(DS.getSourceRange().getBegin(), diag::ext_missing_declspec);
+      // In C89 mode, we only warn if there is a completely missing declspec
+      // when one is not allowed.
+      if (DS.isEmpty())
+        Diag(DS.getSourceRange().getBegin(), diag::warn_missing_declspec);
     } else if (!DS.hasTypeSpecifier()) {
       // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:
       // "At least one type specifier shall be given in the declaration
@@ -86,7 +86,7 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
       // FIXME: Does Microsoft really have the implicit int extension in C++?
       unsigned DK = getLangOptions().CPlusPlus && !getLangOptions().Microsoft?
           diag::err_missing_type_specifier
-        : diag::ext_missing_type_specifier;
+        : diag::warn_missing_type_specifier;
       Diag(DS.getSourceRange().getBegin(), DK);
     }
       
index 27283de79cc7064e6145ddd3989dbcdecf4a6529..039bafea0976ed4ec1981c06cef6b1a2779e442d 100644 (file)
@@ -11,7 +11,7 @@ void * __ptr64 PtrToPtr64(const void *p)
 {
     return((void * __ptr64) (unsigned __int64) (ULONG_PTR)p );
 }
-__forceinline InterlockedBitTestAndSet (long *Base, long Bit)
+__forceinline InterlockedBitTestAndSet (long *Base, long Bit)  // expected-warning {{type specifier missing, defaults to 'int'}}
 {
     __asm {
            mov eax, Bit
index 308db0579e5ffe4855ea17d5737eec3f5abac194..31c8097ccb25ce42049ae9717781c19cbad40dd0 100644 (file)
@@ -24,7 +24,7 @@ typedef struct objc_object {
 
 @implementation MyList (BasicTest)
 - (void)compilerTestAgainst {
-    static i;
+    static i;// expected-warning {{type specifier missing, defaults to 'int'}}
         for (id el, elem in self)  // expected-error {{only one element declaration is allowed}}
            ++i;
         for (id el in self) 
index e1b02567eec22740e18f4558c63354cf1aacc440..f89708cec14838ff3ffbcb5b76f2e45348b3f916 100644 (file)
@@ -1,7 +1,7 @@
 // RUN: clang -fsyntax-only %s -verify
 
-x(a) int a; {return a;}
-y(b) int b; {return a;} // expected-error {{use of undeclared identifier}}
+int x(a) int a; {return a;}
+int y(b) int b; {return a;} // expected-error {{use of undeclared identifier}}
 
 // PR2332
-a(a)int a;{a=10;return a;}
+int a(a)int a;{a=10;return a;}
index 1cf04baefd0d1c8c0ea15783478ccc25e551f842..ac51f58021ec65be6c5a88cf93f30d3f80db51ba 100644 (file)
@@ -11,7 +11,7 @@ static void test() {
   typeof(TInt) anInt; 
   short TInt eee; // expected-error{{parse error}}
   void ary[7] fff; // expected-error{{array has incomplete element type 'void'}} expected-error{{parse error}}
-  typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-note {{to match this '('}}
+  typeof(void ary[7]) anIntError; // expected-error{{expected ')'}} expected-note {{to match this '('}}  expected-warning {{type specifier missing, defaults to 'int'}}
   typeof(const int) aci; 
   const typeof (*pi) aConstInt; 
   int xx;
index 8900b08b0d35baab63cc86d377f8d5983e0c5c01..a081b38a8eb5fe898430fbdb54aabd69a16255c2 100644 (file)
@@ -5,7 +5,7 @@
 #define _AS3 __attribute__((address_space(3)))
 
 void foo(_AS3 float *a) {
-  _AS2 *x;
+  _AS2 *x;// expected-warning {{type specifier missing, defaults to 'int'}}
   _AS1 float * _AS2 *B;
 
   int _AS1 _AS2 *Y;   // expected-error {{multiple address spaces specified for type}}
index d5d41abb6cb15d62bd74a2a55a8f091f2ffd3f6b..7f64c03c1bb0b4cdf00f0786a822b21e997765b8 100644 (file)
@@ -40,7 +40,7 @@ void test2() {
 
 foo:
        takeclosure(^{ x = 4; });  // expected-error {{variable is not assignable (missing __block type specifier)}}
-  __block y = 7;
+  __block y = 7; // expected-warning {{type specifier missing, defaults to 'int'}}
   takeclosure(^{ y = 8; });
 }
 
index e4a215fb78fe5bbe1672dfee46117af2b7f38cf3..f15a40fa083522ac267551dcc81de9bfccbbc5d7 100644 (file)
@@ -1,4 +1,10 @@
-// RUN: clang -fsyntax-only %s
+// RUN: clang -fsyntax-only %s -verify -pedantic
 
-foo() {
+foo() { // expected-warning {{type specifier missing, defaults to 'int'}}
 }
+
+y;  // expected-warning {{type specifier missing, defaults to 'int'}}
+
+// rdar://6131634
+void f((x));  // expected-warning {{type specifier missing, defaults to 'int'}}
+
index efc199d39b0a90073175901371b4fe1e2a0f2019..17f316884ee4234c532f6f5e122880fa83e17391 100644 (file)
@@ -6,7 +6,7 @@ void test() {
 
 
 // PR2400
-typedef xtype (*zend_stream_fsizer_t)(void* handle); // expected-error {{function cannot return array or function type}}
+typedef xtype (*zend_stream_fsizer_t)(void* handle); // expected-error {{function cannot return array or function type}} expected-warning {{type specifier missing, defaults to 'int'}} expected-warning {{type specifier missing, defaults to 'int'}}
 
 typedef struct _zend_module_entry zend_module_entry;
 struct _zend_module_entry {
index fb9659269439770b6efc6cda33843f8af3bf45ce..9777a27a0edb822e931cfc34c99b78fe7e776edb 100644 (file)
@@ -3,7 +3,10 @@
 typedef struct _zend_module_entry zend_module_entry;
 struct _zend_module_entry {
   _efree((p)); // expected-error{{type name requires a specifier or qualifier}} \
-               // expected-error{{field '_efree' declared as a function}}
+                  expected-error{{field '_efree' declared as a function}} \
+                  expected-warning {{type specifier missing, defaults to 'int'}} \
+                  expected-warning {{type specifier missing, defaults to 'int'}}
+  
 };
 typedef struct _zend_function_entry { } zend_function_entry;
 typedef struct _zend_pcre_globals { } zend_pcre_globals;