blob: 9ef5c98e9e2cf8d984b8c8ceb0ae9d0f95cadfcc [file] [log] [blame]
Shih-wei Liaof8fd82b2010-02-10 11:10:31 -08001// RUN: %clang_cc1 -fsyntax-only -verify %s
2typedef int INT;
3
4class 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
21Foo::Foo(const Foo&) { }
22
23typedef struct {
24 int version;
25} Anon;
26extern const Anon anon;
27extern "C" const Anon anon2;
28
29// PR3188: The extern declaration complained about not having an appropriate
30// constructor.
31struct x;
32extern x a;
33
34// A similar case.
35struct y {
36 y(int);
37};
38extern y b;
39
40struct Length {
41 Length l() const { return *this; }
42};
43
44// <rdar://problem/6815988>
45struct mmst_reg{
46 char mmst_reg[10];
47};
48
49// PR3948
50namespace PR3948 {
51// PR3948
52class a {
53 public:
54 int b(int a());
55};
56int x();
57void y() {
58 a z; z.b(x);
59}
60}
61
62namespace A {
63 struct S {
64 S();
65 S(int);
66 void f1();
67 void f2();
68 operator int ();
69 ~S();
70 };
71}
72
73A::S::S() {}
74
75void A::S::f1() {}
76
77struct S {};
78
79A::S::S(int) {}
80
81void A::S::f2() {}
82
83A::S::operator int() { return 1; }
84
85A::S::~S() {}
86