1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 typedef int INT;
3
4 class Foo {
5 Foo();
6 (Foo)(float) { }
7 explicit Foo(int); // expected-note {{previous declaration is here}}
8 Foo(const Foo&);
9
10 ((Foo))(INT); // expected-error{{cannot be redeclared}}
11
12 Foo(Foo foo, int i = 17, int j = 42); // expected-error{{copy constructor must pass its first argument by reference}}
13
14 static Foo(short, short); // expected-error{{constructor cannot be declared 'static'}}
15 virtual Foo(double); // expected-error{{constructor cannot be declared 'virtual'}}
16 Foo(long) const; // expected-error{{'const' qualifier is not allowed on a constructor}}
17
18 int Foo(int, int); // expected-error{{constructor cannot have a return type}} \
19 // expected-error{{member 'Foo' has the same name as its class}}
20 };
21
Foo(const Foo &)22 Foo::Foo(const Foo&) { }
23
24 typedef struct {
25 int version;
26 } Anon;
27 extern const Anon anon;
28 extern "C" const Anon anon2;
29
30 // PR3188: The extern declaration complained about not having an appropriate
31 // constructor.
32 struct x;
33 extern x a;
34
35 // A similar case.
36 struct y {
37 y(int);
38 };
39 extern y b;
40
41 struct Length {
lLength42 Length l() const { return *this; }
43 };
44
45 // <rdar://problem/6815988>
46 struct mmst_reg{
47 char mmst_reg[10];
48 };
49
50 // PR3948
51 namespace PR3948 {
52 // PR3948
53 class a {
54 public:
55 int b(int a());
56 };
57 int x();
y()58 void y() {
59 a z; z.b(x);
60 }
61 }
62
63 namespace A {
64 struct S {
65 S();
66 S(int);
67 void f1();
68 void f2();
69 operator int ();
70 ~S();
71 };
72 }
73
S()74 A::S::S() {}
75
f1()76 void A::S::f1() {}
77
78 struct S {};
79
S(int)80 A::S::S(int) {}
81
f2()82 void A::S::f2() {}
83
operator int()84 A::S::operator int() { return 1; }
85
~S()86 A::S::~S() {}
87
88