1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -pedantic-errors -fcxx-exceptions -fexceptions %s 28129edbb576c297df8631c3db4ac1339f4a9e8adChris Lattner 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesconst char const *x10; // expected-error {{duplicate 'const' declaration specifier}} 4c828620a03b20835a376f6f456a72e44599f4f87Aaron Ballman 58129edbb576c297df8631c3db4ac1339f4a9e8adChris Lattnerint x(*g); // expected-error {{use of undeclared identifier 'g'}} 646646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 7a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattnerstruct Type { 8a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattner int Type; 9a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattner}; 10a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner 114383e18fc3d79fd536c6992432e180a11bcb657dArgyrios Kyrtzidis// rdar://8365458 12e106a0bfac30a8a215a68cc28aeb46b054dcb91fFariborz Jahanian// rdar://9132143 13e106a0bfac30a8a215a68cc28aeb46b054dcb91fFariborz Jahaniantypedef char bool; // expected-error {{redeclaration of C++ built-in type 'bool'}} 1446646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 1546646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner// PR4451 - We should recover well from the typo of '::' as ':' in a2. 1646646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnernamespace y { 17932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner struct a { }; 18932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner typedef int b; 1946646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner} 2046646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 2146646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnery::a a1; 2246646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnery:a a2; // expected-error {{unexpected ':' in nested name specifier}} 2346646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnery::a a3 = a2; 2446646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 2546646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner// Some valid colons: 2646646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnervoid foo() { 2746646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnery: // label 2846646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner y::a s; 2946646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 3046646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner int a = 4; 3146646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner a = a ? a : a+1; 3246646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner} 3346646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 3446646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnerstruct b : y::a {}; 3546646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 3646646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnertemplate <typename T> 3746646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattnerclass someclass { 3846646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner 3946646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner int bar() { 4046646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner T *P; 4146646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner return 1 ? P->x : P->y; 4246646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner } 4346646491834cd8faabb22482dfe93b24ce28a6c1Chris Lattner}; 44a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner 45e6563256a4b3b9fee70ce3335d28406607c1faafChris Lattnerclass asm_class_test { 46e6563256a4b3b9fee70ce3335d28406607c1faafChris Lattner void foo() __asm__("baz"); 47e6563256a4b3b9fee70ce3335d28406607c1faafChris Lattner}; 48e6563256a4b3b9fee70ce3335d28406607c1faafChris Lattner 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum { fooenum = 1, }; // expected-error {{commas at the end of enumerator lists are a C++11 extension}} 50a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner 51a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattnerstruct a { 52a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner int Type : fooenum; 53a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner}; 54a1efc8c8c6460d860d6509b05b341e77ed9bfe87Chris Lattner 55a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattnervoid test(struct Type *P) { 56a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattner int Type; 57a69d0ed3ab66e96393586664a103e9482ec59e6fChris Lattner Type = 1 ? P->Type : Type; 58932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner 59932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner Type = (y:b) 4; // expected-error {{unexpected ':' in nested name specifier}} 60932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner Type = 1 ? ( 61932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner (y:b) // expected-error {{unexpected ':' in nested name specifier}} 62932dff777d58a23e3a26967a61bb52697c542fd4Chris Lattner 4) : 5; 63a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar} 64ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattner 65ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattnerstruct test4 { 66ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattner int x // expected-error {{expected ';' at end of declaration list}} 67ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattner int y; 68ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattner int z // expected-error {{expected ';' at end of declaration list}} 69ae50d501f463d7032320ec31840f60ae68df3a55Chris Lattner}; 702e0a715595a21adeb7172995df59317741301aa3John McCall 710706df40064d4d7559b4304af79d519033414b84Richard Smith// Make sure we know these are legitimate commas and not typos for ';'. 720706df40064d4d7559b4304af79d519033414b84Richard Smithnamespace Commas { 730706df40064d4d7559b4304af79d519033414b84Richard Smith struct S { 740706df40064d4d7559b4304af79d519033414b84Richard Smith static int a; 750706df40064d4d7559b4304af79d519033414b84Richard Smith int c, 760706df40064d4d7559b4304af79d519033414b84Richard Smith operator()(); 770706df40064d4d7559b4304af79d519033414b84Richard Smith }; 780706df40064d4d7559b4304af79d519033414b84Richard Smith 790706df40064d4d7559b4304af79d519033414b84Richard Smith int global1, 800706df40064d4d7559b4304af79d519033414b84Richard Smith __attribute__(()) global2, 810706df40064d4d7559b4304af79d519033414b84Richard Smith (global5), 820706df40064d4d7559b4304af79d519033414b84Richard Smith *global6, 830706df40064d4d7559b4304af79d519033414b84Richard Smith &global7 = global1, 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines &&global8 = static_cast<int&&>(global1), // expected-error 2{{rvalue reference}} 850706df40064d4d7559b4304af79d519033414b84Richard Smith S::a, 860706df40064d4d7559b4304af79d519033414b84Richard Smith global9, 870706df40064d4d7559b4304af79d519033414b84Richard Smith global10 = 0, 880706df40064d4d7559b4304af79d519033414b84Richard Smith global11 == 0, // expected-error {{did you mean '='}} 890706df40064d4d7559b4304af79d519033414b84Richard Smith global12 __attribute__(()), 900706df40064d4d7559b4304af79d519033414b84Richard Smith global13(0), 910706df40064d4d7559b4304af79d519033414b84Richard Smith global14[2], 920706df40064d4d7559b4304af79d519033414b84Richard Smith global15; 930706df40064d4d7559b4304af79d519033414b84Richard Smith 940706df40064d4d7559b4304af79d519033414b84Richard Smith void g() { 950706df40064d4d7559b4304af79d519033414b84Richard Smith static int a, 960706df40064d4d7559b4304af79d519033414b84Richard Smith b __asm__("ebx"), // expected-error {{expected ';' at end of declaration}} 970706df40064d4d7559b4304af79d519033414b84Richard Smith Statics:return; 980706df40064d4d7559b4304af79d519033414b84Richard Smith } 990706df40064d4d7559b4304af79d519033414b84Richard Smith} 1000706df40064d4d7559b4304af79d519033414b84Richard Smith 1012e0a715595a21adeb7172995df59317741301aa3John McCall// PR5825 1022e0a715595a21adeb7172995df59317741301aa3John McCallstruct test5 {}; 1032e0a715595a21adeb7172995df59317741301aa3John McCall::new(static_cast<void*>(0)) test5; // expected-error {{expected unqualified-id}} 1045c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattner 1055c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattner 1065c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattner// PR6782 1075c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattnertemplate<class T> 1085c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattnerclass Class1; 1095c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattner 1105c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattnerclass Class2 { 111f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling} // expected-error {{expected ';' after class}} 1125c5db553b5c256d0a6f55dde7325c1c829b88e8eChris Lattner 113f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingtypedef Class1<Class2> Type1; 114d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanian 115d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanian// rdar : // 8307865 116d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanianstruct CodeCompleteConsumer { 117d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanian}; 118d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanian 119d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanianvoid CodeCompleteConsumer::() { // expected-error {{xpected unqualified-id}} 120d6577428627bd4b7f8cd87e213151ebe6a587a9fFariborz Jahanian} 121729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner 122729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner; 123729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner 1240576681bac125be07f77f66b02a3dba2c3a24557Richard Smith// PR4111 1250576681bac125be07f77f66b02a3dba2c3a24557Richard Smithvoid f(sqrgl); // expected-error {{unknown type name 'sqrgl'}} 1260576681bac125be07f77f66b02a3dba2c3a24557Richard Smith 1276f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith// PR9903 1286f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smithstruct S { 1296f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith typedef void a() { }; // expected-error {{function definition declared 'typedef'}} 1306f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith typedef void c() try { } catch(...) { } // expected-error {{function definition declared 'typedef'}} 1316f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith int n, m; 1326f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith typedef S() : n(1), m(2) { } // expected-error {{function definition declared 'typedef'}} 1336f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith}; 1346f9a445760992a6fbff2c0b08becf35ae9eafa71Richard Smith 13555fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber 13655fc3a767b9945bd1f311f2339dcaa8761da5661Nico Webernamespace TestIsValidAfterTypeSpecifier { 137ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smithstruct s {} v; 13855fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber 13955fc3a767b9945bd1f311f2339dcaa8761da5661Nico Webernamespace a { 14055fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weberstruct s operator++(struct s a) 14155fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber{ return a; } 14255fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber} 14355fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber 14455fc3a767b9945bd1f311f2339dcaa8761da5661Nico Webernamespace b { 14555fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber// The newline after s should make no difference. 14655fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weberstruct s 14755fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weberoperator++(struct s a) 14855fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber{ return a; } 14955fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber} 15055fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber 151ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smithstruct X { 152ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith struct s 153ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith friend f(); 154ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith struct s 155ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith virtual f(); 156ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith}; 157ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith 158ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smithstruct s 159ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith&r0 = v; 160ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smithstruct s 161ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smithbitand r2 = v; 162ba65f505b7cc2551571b299d05d767e0a892aaaeRichard Smith 16355fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber} 16455fc3a767b9945bd1f311f2339dcaa8761da5661Nico Weber 165db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieustruct DIE { 166db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu void foo() {} 167db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu}; 168db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu 169db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieuvoid test (DIE die, DIE *Die, DIE INT, DIE *FLOAT) { 170db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu DIE.foo(); // expected-error {{cannot use dot operator on a type}} 171db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu die.foo(); 172db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu 173db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu DIE->foo(); // expected-error {{cannot use arrow operator on a type}} 174db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu Die->foo(); 175db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu 176db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu int.foo(); // expected-error {{cannot use dot operator on a type}} 177db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu INT.foo(); 178db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu 179db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu float->foo(); // expected-error {{cannot use arrow operator on a type}} 180db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu FLOAT->foo(); 181db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu} 182db55c04cb3384b192a418a840a9ba6321941fc0dRichard Trieu 1838338a9d28c4a9d06b19b1c5df51e70182914e2dfRichard Smithnamespace PR15017 { 184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines template<typename T = struct X { int i; }> struct S {}; // expected-error {{'PR15017::X' cannot be defined in a type specifier}} 1858338a9d28c4a9d06b19b1c5df51e70182914e2dfRichard Smith} 1868338a9d28c4a9d06b19b1c5df51e70182914e2dfRichard Smith 187672edb0a04a5273e3a501f3b196844c125290780Richard Smith// Ensure we produce at least some diagnostic for attributes in C++98. 188672edb0a04a5273e3a501f3b196844c125290780Richard Smith[[]] struct S; // expected-error 2{{}} 189672edb0a04a5273e3a501f3b196844c125290780Richard Smith 190efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieunamespace test7 { 191efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu struct Foo { 192efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu void a(); 193efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu void b(); 194efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu }; 195efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu 196efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu void Foo:: 197efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu // Comment! 198efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu a() {} 199efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu 200efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu 201efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu void Foo:: // expected-error {{expected unqualified-id}} 202efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu // Comment! 203efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu} 204efb288c3c1e67cb94410fd43aa0352922bcb5d52Richard Trieu 205fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramervoid test8() { 206fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramer struct {} o; 207fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramer // This used to crash. 208fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramer (&o)->(); // expected-error{{expected unqualified-id}} 209fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramer} 210fbac5c11d4ecd39f083a8d7247ddcb5a0a49c667Benjamin Kramer 211a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smithnamespace PR5066 { 212a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith template<typename T> struct X {}; 213a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith X<int N> x; // expected-error {{type-id cannot have a name}} 214a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines using T = int (*T)(); // expected-error {{type-id cannot have a name}} expected-error {{C++11}} 216a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith} 217a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith 218ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemernamespace PR17255 { 219ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemervoid foo() { 220ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemer typename A::template B<>; // expected-error {{use of undeclared identifier 'A'}} \ 221ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemer // expected-error {{expected a qualified name after 'typename'}} \ 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // expected-error {{'template' keyword outside of a template}} 223ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemer} 224ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemer} 225ff989a8b1d3cf52131c179fceea656d7977e5b3cDavid Majnemer 226b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smithnamespace PR17567 { 227b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith struct Foobar { // expected-note 2{{declared here}} 228b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith FooBar(); // expected-error {{missing return type for function 'FooBar'; did you mean the constructor name 'Foobar'?}} 229b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith ~FooBar(); // expected-error {{expected the class name after '~' to name a destructor}} 230b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith }; 231b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith FooBar::FooBar() {} // expected-error {{undeclared}} expected-error {{missing return type}} 232b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith FooBar::~FooBar() {} // expected-error {{undeclared}} expected-error {{expected the class name}} 233b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith} 234b79b17b67f2c0de8fd343fdd070e5ccbfe20d602Richard Smith 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace DuplicateFriend { 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines struct A { 237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines friend void friend f(); // expected-warning {{duplicate 'friend' declaration specifier}} 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines friend struct B friend; // expected-warning {{duplicate 'friend' declaration specifier}} 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 242729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner// PR8380 243729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattnerextern "" // expected-error {{unknown linkage language}} 244729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattnertest6a { ;// expected-error {{C++ requires a type specifier for all declarations}} \ 245729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner // expected-error {{expected ';' after top level declarator}} 246729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner 247729ad83035f4e62eaec403fbdc7c1c843fa30f59Chris Lattner int test6b; 248