blob: e00ffd070fd888aea0fd9924dc6d107d86d5f758 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -verify -fsyntax-only %s
Chris Lattner8129edb2009-04-12 22:23:27 +00002
3int x(*g); // expected-error {{use of undeclared identifier 'g'}}
Chris Lattner46646492009-12-07 01:36:53 +00004
Chris Lattnera69d0ed2009-12-10 02:02:58 +00005struct Type {
6 int Type;
7};
Chris Lattnera1efc8c2009-12-10 01:59:24 +00008
Chris Lattner46646492009-12-07 01:36:53 +00009
10// PR4451 - We should recover well from the typo of '::' as ':' in a2.
11namespace y {
Chris Lattner932dff72009-12-10 02:08:07 +000012 struct a { };
13 typedef int b;
Chris Lattner46646492009-12-07 01:36:53 +000014}
15
16y::a a1;
17y:a a2; // expected-error {{unexpected ':' in nested name specifier}}
18y::a a3 = a2;
19
20// Some valid colons:
21void foo() {
22y: // label
23 y::a s;
24
25 int a = 4;
26 a = a ? a : a+1;
27}
28
29struct b : y::a {};
30
31template <typename T>
32class someclass {
33
34 int bar() {
35 T *P;
36 return 1 ? P->x : P->y;
37 }
38};
Chris Lattnera1efc8c2009-12-10 01:59:24 +000039
Chris Lattnere6563252010-06-13 05:34:18 +000040class asm_class_test {
41 void foo() __asm__("baz");
42};
43
Chris Lattnera1efc8c2009-12-10 01:59:24 +000044enum { fooenum = 1 };
45
46struct a {
47 int Type : fooenum;
48};
49
Chris Lattnera69d0ed2009-12-10 02:02:58 +000050void test(struct Type *P) {
51 int Type;
52 Type = 1 ? P->Type : Type;
Chris Lattner932dff72009-12-10 02:08:07 +000053
54 Type = (y:b) 4; // expected-error {{unexpected ':' in nested name specifier}}
55 Type = 1 ? (
56 (y:b) // expected-error {{unexpected ':' in nested name specifier}}
57 4) : 5;
Daniel Dunbara5728872009-12-15 20:14:24 +000058}
Chris Lattnerae50d502010-02-02 00:43:15 +000059
60struct test4 {
61 int x // expected-error {{expected ';' at end of declaration list}}
62 int y;
63 int z // expected-error {{expected ';' at end of declaration list}}
64};
John McCall2e0a7152010-03-01 18:20:46 +000065
66// PR5825
67struct test5 {};
68::new(static_cast<void*>(0)) test5; // expected-error {{expected unqualified-id}}
Chris Lattner5c5db552010-04-05 18:18:31 +000069
70
71// PR6782
72template<class T>
73class Class1;
74
75class Class2 {
76} // no ;
77
78typedef Class1<Class2> Type1; // expected-error {{cannot combine with previous 'class' declaration specifier}}
Fariborz Jahaniand6577422010-08-16 17:58:53 +000079
80// rdar : // 8307865
81struct CodeCompleteConsumer {
82};
83
84void CodeCompleteConsumer::() { // expected-error {{xpected unqualified-id}}
85}