[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