Home | History | Annotate | Download | only in Parser
      1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
      2 class C;
      3 class C {
      4 public:
      5 protected:
      6   typedef int A,B;
      7   static int sf(), u;
      8 
      9   struct S {};
     10   enum {}; // expected-warning{{declaration does not declare anything}}
     11   int; // expected-warning {{declaration does not declare anything}}
     12   int : 1, : 2;
     13 
     14 public:
     15   void m0() {}; // ok, one extra ';' is permitted
     16   void m1() {}
     17   ; // ok, one extra ';' is permitted
     18   void m() {
     19     int l = 2;
     20   };; // expected-warning{{extra ';' after member function definition}}
     21 
     22   template<typename T> void mt(T) { }
     23   ;
     24   ; // expected-warning{{extra ';' inside a class}}
     25 
     26   virtual int vf() const volatile = 0;
     27 
     28 private:
     29   int x,f(),y,g();
     30   inline int h();
     31   static const int sci = 10;
     32   mutable int mi;
     33 };
     34 void glo()
     35 {
     36   struct local {};
     37 }
     38 
     39 // PR3177
     40 typedef union {
     41   __extension__ union {
     42     int a;
     43     float b;
     44   } y;
     45 } bug3177;
     46 
     47 // check that we don't consume the token after the access specifier
     48 // when it's not a colon
     49 class D {
     50 public // expected-error{{expected ':'}}
     51   int i;
     52 };
     53 
     54 // consume the token after the access specifier if it's a semicolon
     55 // that was meant to be a colon
     56 class E {
     57 public; // expected-error{{expected ':'}}
     58   int i;
     59 };
     60 
     61 class F {
     62     int F1 { return 1; } // expected-error{{function definition does not declare parameters}}
     63     void F2 {} // expected-error{{function definition does not declare parameters}}
     64     typedef int F3() { return 0; } // expected-error{{function definition declared 'typedef'}}
     65     typedef void F4() {} // expected-error{{function definition declared 'typedef'}}
     66 };
     67 
     68 namespace ctor_error {
     69   class Foo {};
     70   // By [class.qual]p2, this is a constructor declaration.
     71   Foo::Foo (F) = F(); // expected-error{{does not match any declaration in 'ctor_error::Foo'}}
     72 
     73   class Ctor { // expected-note{{not complete until the closing '}'}}
     74     Ctor(f)(int); // ok
     75     Ctor(g(int)); // ok
     76     Ctor(x[5]); // expected-error{{incomplete type}}
     77 
     78     Ctor(UnknownType *); // expected-error{{unknown type name 'UnknownType'}}
     79     void operator+(UnknownType*); // expected-error{{unknown type name 'UnknownType'}}
     80   };
     81 
     82   Ctor::Ctor (x) = { 0 }; // \
     83     // expected-error{{qualified reference to 'Ctor' is a constructor name}}
     84 
     85   Ctor::Ctor(UnknownType *) {} // \
     86     // expected-error{{unknown type name 'UnknownType'}}
     87   void Ctor::operator+(UnknownType*) {} // \
     88     // expected-error{{unknown type name 'UnknownType'}}
     89 }
     90 
     91 namespace nns_decl {
     92   struct A {
     93     struct B;
     94   };
     95   namespace N {
     96     union C;
     97   }
     98   struct A::B; // expected-error {{forward declaration of struct cannot have a nested name specifier}}
     99   union N::C; // expected-error {{forward declaration of union cannot have a nested name specifier}}
    100 }
    101 
    102 // PR13775: Don't assert here.
    103 namespace PR13775 {
    104   class bar
    105   {
    106    public:
    107     void foo ();
    108     void baz ();
    109   };
    110   void bar::foo ()
    111   {
    112     baz x(); // expected-error 3{{}}
    113   }
    114 }
    115 
    116 // PR11109 must appear at the end of the source file
    117 class pr11109r3 { // expected-note{{to match this '{'}}
    118   public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}}
    119