1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // PR clang/3175 3*67e74705SXin Li 4*67e74705SXin Li void bar(int*); 5*67e74705SXin Li 6*67e74705SXin Li class c { 7*67e74705SXin Li int var; 8*67e74705SXin Li static int svar; foo()9*67e74705SXin Li void foo() { 10*67e74705SXin Li bar(&var); 11*67e74705SXin Li bar(&svar); 12*67e74705SXin Li } 13*67e74705SXin Li wibble()14*67e74705SXin Li static void wibble() { 15*67e74705SXin Li bar(&var); // expected-error{{invalid use of member 'var' in static member function}} 16*67e74705SXin Li bar(&svar); 17*67e74705SXin Li } 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li enum E { 21*67e74705SXin Li Enumerator 22*67e74705SXin Li }; 23*67e74705SXin Li test()24*67e74705SXin Livoid test() { 25*67e74705SXin Li (void)&Enumerator; // expected-error{{cannot take the address of an rvalue of type 'E'}} 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li template<int N> test2()29*67e74705SXin Livoid test2() { 30*67e74705SXin Li (void)&N; // expected-error{{cannot take the address of an rvalue of type 'int'}} 31*67e74705SXin Li } 32*67e74705SXin Li 33*67e74705SXin Li // PR clang/3222 34*67e74705SXin Li void xpto(); 35*67e74705SXin Li void (*xyz)(void) = &xpto; 36*67e74705SXin Li 37*67e74705SXin Li struct PR11066 { 38*67e74705SXin Li static int foo(short); 39*67e74705SXin Li static int foo(float); 40*67e74705SXin Li void test(); 41*67e74705SXin Li }; 42*67e74705SXin Li test()43*67e74705SXin Livoid PR11066::test() { 44*67e74705SXin Li int (PR11066::*ptr)(int) = & &PR11066::foo; // expected-error{{extra '&' taking address of overloaded function}} 45*67e74705SXin Li } 46*67e74705SXin Li 47*67e74705SXin Li namespace test3 { 48*67e74705SXin Li // emit no error 49*67e74705SXin Li template<typename T> struct S { 50*67e74705SXin Li virtual void f() = 0; 51*67e74705SXin Li }; f()52*67e74705SXin Li template<typename T> void S<T>::f() { T::error; } 53*67e74705SXin Li void (S<int>::*p)() = &S<int>::f; 54*67e74705SXin Li } 55