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