]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/constructor.cpp
Update clang to r86025.
[FreeBSD/FreeBSD.git] / test / SemaCXX / constructor.cpp
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
62 namespace A {
63   struct S {
64     S();
65     S(int);
66     void f1();
67     void f2();
68     operator int ();
69     ~S();
70   };
71 }
72
73 A::S::S() {}
74
75 void A::S::f1() {}
76
77 struct S {};
78
79 A::S::S(int) {}
80
81 void A::S::f2() {}
82
83 A::S::operator int() { return 1; }
84
85 A::S::~S() {}
86