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