1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li namespace foo { 3*67e74705SXin Li namespace wibble { 4*67e74705SXin Li struct x { int y; }; 5*67e74705SXin Li 6*67e74705SXin Li namespace bar { 7*67e74705SXin Li namespace wonka { 8*67e74705SXin Li struct x { 9*67e74705SXin Li struct y { }; 10*67e74705SXin Li }; 11*67e74705SXin Li } 12*67e74705SXin Li } 13*67e74705SXin Li } 14*67e74705SXin Li } 15*67e74705SXin Li 16*67e74705SXin Li namespace bar { 17*67e74705SXin Li typedef int y; 18*67e74705SXin Li 19*67e74705SXin Li struct incomplete; // expected-note{{forward declaration of 'bar::incomplete'}} 20*67e74705SXin Li } test()21*67e74705SXin Livoid test() { 22*67e74705SXin Li foo::wibble::x a; 23*67e74705SXin Li ::bar::y b; 24*67e74705SXin Li a + b; // expected-error{{invalid operands to binary expression ('foo::wibble::x' and '::bar::y' (aka 'int'))}} 25*67e74705SXin Li 26*67e74705SXin Li ::foo::wibble::bar::wonka::x::y c; 27*67e74705SXin Li c + b; // expected-error{{invalid operands to binary expression ('::foo::wibble::bar::wonka::x::y' and '::bar::y' (aka 'int'))}} 28*67e74705SXin Li 29*67e74705SXin Li (void)sizeof(bar::incomplete); // expected-error{{invalid application of 'sizeof' to an incomplete type 'bar::incomplete'}} 30*67e74705SXin Li } 31*67e74705SXin Li 32*67e74705SXin Li int ::foo::wibble::bar::wonka::x::y::* ptrmem; 33*67e74705SXin Li 34