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