Home | History | Annotate | Download | only in SemaCXX
      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 
     20   volatile Foo(float); // expected-error{{constructor cannot have a return type}}
     21 };
     22 
     23 Foo::Foo(const Foo&) { }
     24 
     25 typedef struct {
     26   int version;
     27 } Anon;
     28 extern const Anon anon;
     29 extern "C" const Anon anon2;
     30 
     31 // PR3188: The extern declaration complained about not having an appropriate
     32 // constructor.
     33 struct x;
     34 extern x a;
     35 
     36 // A similar case.
     37 struct y {
     38   y(int);
     39 };
     40 extern y b;
     41 
     42 struct Length {
     43   Length l() const { return *this; }
     44 };
     45 
     46 // <rdar://problem/6815988>
     47 struct mmst_reg{
     48  char mmst_reg[10];
     49 };
     50 
     51 // PR3948
     52 namespace PR3948 {
     53 // PR3948
     54 class a {
     55   public:
     56   int b(int a());
     57 };
     58 int x();
     59 void y() {
     60   a z; z.b(x);
     61 }
     62 }
     63 
     64 namespace A {
     65   struct S {
     66     S();
     67     S(int);
     68     void f1();
     69     void f2();
     70     operator int ();
     71     ~S();
     72   };
     73 }
     74 
     75 A::S::S() {}
     76 
     77 void A::S::f1() {}
     78 
     79 struct S {};
     80 
     81 A::S::S(int) {}
     82 
     83 void A::S::f2() {}
     84 
     85 A::S::operator int() { return 1; }
     86 
     87 A::S::~S() {}
     88 
     89