[cfe-commits] r112196 - in /cfe/trunk: lib/Sema/DeclSpec.cpp test/Parser/declarators.c

John McCall rjmccall at apple.com
Thu Aug 26 10:22:35 PDT 2010


Author: rjmccall
Date: Thu Aug 26 12:22:34 2010
New Revision: 112196

URL: http://llvm.org/viewvc/llvm-project?rev=112196&view=rev
Log:
Make sure we clear TypeSpecOwned when setting TypeSpecType to something when
it might previously have been a tag TST.


Modified:
    cfe/trunk/lib/Sema/DeclSpec.cpp
    cfe/trunk/test/Parser/declarators.c

Modified: cfe/trunk/lib/Sema/DeclSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=112196&r1=112195&r2=112196&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/DeclSpec.cpp (original)
+++ cfe/trunk/lib/Sema/DeclSpec.cpp Thu Aug 26 12:22:34 2010
@@ -396,6 +396,7 @@
 
 bool DeclSpec::SetTypeSpecError() {
   TypeSpecType = TST_error;
+  TypeSpecOwned = false;
   TSTLoc = SourceLocation();
   return false;
 }
@@ -544,6 +545,7 @@
       TypeSpecType = TST_int;
       TypeSpecSign = TSS_unsigned;
       TypeSpecWidth = TSW_short;
+      TypeSpecOwned = false;
     }
   }
 
@@ -573,6 +575,7 @@
                                       : diag::err_invalid_longlong_spec)
         <<  getSpecifierName((TST)TypeSpecType);
       TypeSpecType = TST_int;
+      TypeSpecOwned = false;
     }
     break;
   case TSW_long:  // long double, long int
@@ -582,6 +585,7 @@
       Diag(D, TSWLoc, SrcMgr, diag::err_invalid_long_spec)
         << getSpecifierName((TST)TypeSpecType);
       TypeSpecType = TST_int;
+      TypeSpecOwned = false;
     }
     break;
   }
@@ -622,6 +626,8 @@
     ClearStorageClassSpecs();
   }
 
+  assert(!TypeSpecOwned || isDeclRep((TST) TypeSpecType));
+
   // Okay, now we can infer the real type.
 
   // TODO: return "auto function" and other bad things based on the real type.

Modified: cfe/trunk/test/Parser/declarators.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/declarators.c?rev=112196&r1=112195&r2=112196&view=diff
==============================================================================
--- cfe/trunk/test/Parser/declarators.c (original)
+++ cfe/trunk/test/Parser/declarators.c Thu Aug 26 12:22:34 2010
@@ -94,3 +94,6 @@
 
 void test14a();
 void *test14b = (void*)test14a; // Make sure test14a didn't get skipped.
+
+// rdar://problem/8358508
+long struct X {} test15(); // expected-error {{'long struct' is invalid}}





More information about the cfe-commits mailing list