1 // RUN: clang-cc -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 };
20 
21 Foo::Foo(const Foo&) { }
22 
23 typedef struct {
24   int version;
25 } Anon;
26 extern const Anon anon;
27 extern "C" const Anon anon2;
28 
29 // PR3188: The extern declaration complained about not having an appropriate
30 // constructor.
31 struct x;
32 extern x a;
33 
34 // A similar case.
35 struct y {
36   y(int);
37 };
38 extern y b;
39 
40 struct Length {
41   Length l() const { return *this; }
42 };
43 
44 // <rdar://problem/6815988>
45 struct mmst_reg{
46  char mmst_reg[10];
47 };
48 
49 // PR3948
50 namespace PR3948 {
51 // PR3948
52 class a {
53   public:
54   int b(int a());
55 };
56 int x();
57 void y() {
58   a z; z.b(x);
59 }
60 }
61