1 // RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux %s
2 
3 int x(*g); // expected-error {{use of undeclared identifier 'g'}}
4 
5 struct Type {
6   int Type;
7 };
8 
9 // rdar://8365458
10 // rdar://9132143
11 typedef char bool; // expected-error {{redeclaration of C++ built-in type 'bool'}}
12 
13 // PR4451 - We should recover well from the typo of '::' as ':' in a2.
14 namespace y {
15   struct a { };
16   typedef int b;
17 }
18 
19 y::a a1;
20 y:a a2;  // expected-error {{unexpected ':' in nested name specifier}}
21 y::a a3 = a2;
22 
23 // Some valid colons:
24 void foo() {
25 y:  // label
26   y::a s;
27 
28   int a = 4;
29   a = a ? a : a+1;
30 }
31 
32 struct b : y::a {};
33 
34 template <typename T>
35 class someclass {
36 
37   int bar() {
38     T *P;
39     return 1 ? P->x : P->y;
40   }
41 };
42 
43 class asm_class_test {
44   void foo() __asm__("baz");
45 };
46 
47 enum { fooenum = 1 };
48 
49 struct a {
50   int Type : fooenum;
51 };
52 
53 void test(struct Type *P) {
54   int Type;
55   Type = 1 ? P->Type : Type;
56 
57   Type = (y:b) 4;   // expected-error {{unexpected ':' in nested name specifier}}
58   Type = 1 ? (
59               (y:b)  // expected-error {{unexpected ':' in nested name specifier}}
60               4) : 5;
61 }
62 
63 struct test4 {
64   int x  // expected-error {{expected ';' at end of declaration list}}
65   int y;
66   int z  // expected-error {{expected ';' at end of declaration list}}
67 };
68 
69 // Make sure we know these are legitimate commas and not typos for ';'.
70 namespace Commas {
71   struct S {
72     static int a;
73     int c,
74     operator()();
75   };
76 
77   int global1,
78   __attribute__(()) global2,
79   (global5),
80   *global6,
81   &global7 = global1,
82   &&global8 = static_cast<int&&>(global1), // expected-warning 2{{rvalue reference}}
83   S::a,
84   global9,
85   global10 = 0,
86   global11 == 0, // expected-error {{did you mean '='}}
87   global12 __attribute__(()),
88   global13(0),
89   global14[2],
90   global15;
91 
92   void g() {
93     static int a,
94     b __asm__("ebx"), // expected-error {{expected ';' at end of declaration}}
95     Statics:return;
96   }
97 }
98 
99 // PR5825
100 struct test5 {};
101 ::new(static_cast<void*>(0)) test5; // expected-error {{expected unqualified-id}}
102 
103 
104 // PR6782
105 template<class T>
106 class Class1;
107 
108 class Class2 {
109 }  // no ;
110 
111 typedef Class1<Class2> Type1; // expected-error {{cannot combine with previous 'class' declaration specifier}}
112 
113 // rdar : // 8307865
114 struct CodeCompleteConsumer {
115 };
116 
117 void CodeCompleteConsumer::() { // expected-error {{xpected unqualified-id}}
118 }
119 
120 ;
121 
122 // PR8380
123 extern ""      // expected-error {{unknown linkage language}}
124 test6a { ;// expected-error {{C++ requires a type specifier for all declarations}} \
125      // expected-error {{expected ';' after top level declarator}}
126 
127   int test6b;
128 
129 
130