Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 namespace A { // expected-note 2 {{previous definition is here}}
      3   int A;
      4   void f() { A = 0; }
      5 }
      6 
      7 void f() { A = 0; } // expected-error {{unexpected namespace name 'A': expected expression}}
      8 int A; // expected-error {{redefinition of 'A' as different kind of symbol}}
      9 class A; // expected-error {{redefinition of 'A' as different kind of symbol}}
     10 
     11 class B {}; // expected-note {{previous definition is here}} \
     12             // expected-note{{candidate function (the implicit copy assignment operator)}}
     13 
     14 void C(); // expected-note {{previous definition is here}}
     15 namespace C {} // expected-error {{redefinition of 'C' as different kind of symbol}}
     16 
     17 namespace D {
     18   class D {};
     19 }
     20 
     21 namespace S1 {
     22   int x;
     23 
     24   namespace S2 {
     25 
     26     namespace S3 {
     27       B x;
     28     }
     29   }
     30 }
     31 
     32 namespace S1 {
     33   void f() {
     34     x = 0;
     35   }
     36 
     37   namespace S2 {
     38 
     39     namespace S3 {
     40       void f() {
     41         x = 0; // expected-error {{no viable overloaded '='}}
     42       }
     43     }
     44 
     45     int y;
     46   }
     47 }
     48 
     49 namespace S1 {
     50   namespace S2 {
     51     namespace S3 {
     52       void f3() {
     53         y = 0;
     54       }
     55     }
     56   }
     57 }
     58 
     59 namespace B {} // expected-error {{redefinition of 'B' as different kind of symbol}}
     60 
     61 
     62 namespace foo {
     63   enum x {
     64     Y
     65   };
     66 }
     67 
     68 static foo::x  test1;  // ok
     69 
     70 static foo::X  test2;  // typo: expected-error {{no type named 'X' in}}
     71 
     72 namespace PR6620 {
     73   namespace numeric {
     74     namespace op {
     75       struct greater {};
     76     }
     77     namespace {
     78       extern op::greater const greater;
     79     }
     80   }
     81 
     82   namespace numeric {
     83     namespace {
     84       op::greater const greater = op::greater();
     85     }
     86 
     87     template<typename T, typename U>
     88     int f(T& l, U& r)
     89     { numeric::greater(l, r); }
     90 
     91   }
     92 }
     93