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   // expected-error{{member 'Foo' has the same name as its class}}
     20 };
     21 
     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 {
     42   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();
     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 
     74 A::S::S() {}
     75 
     76 void A::S::f1() {}
     77 
     78 struct S {};
     79 
     80 A::S::S(int) {}
     81 
     82 void A::S::f2() {}
     83 
     84 A::S::operator int() { return 1; }
     85 
     86 A::S::~S() {}
     87 
     88