1ad00e83aSRichard Trieu // RUN: %clang_cc1 -fsyntax-only -verify %s 2ad00e83aSRichard Trieu 3ad00e83aSRichard Trieu void test0() { 4ad00e83aSRichard Trieu char variable = (void)0; 5ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a variable}} 6ad00e83aSRichard Trieu } 7ad00e83aSRichard Trieu 8ad00e83aSRichard Trieu void test1(int x = (void)0) {} 9ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a parameter}} 10ad00e83aSRichard Trieu // expected-note@-2{{here}} 11ad00e83aSRichard Trieu 12ad00e83aSRichard Trieu int test2() { 13ad00e83aSRichard Trieu return (void)0; 14ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize return object}} 15ad00e83aSRichard Trieu } 16ad00e83aSRichard Trieu 17ad00e83aSRichard Trieu struct S4 { 18ad00e83aSRichard Trieu S4() : x((void)0) {}; 19ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a member subobject}} 20ad00e83aSRichard Trieu int x; 21ad00e83aSRichard Trieu }; 22ad00e83aSRichard Trieu 23ad00e83aSRichard Trieu void test5() { 24ad00e83aSRichard Trieu int foo[2] = {1, (void)0}; 25ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize an array element}} 26ad00e83aSRichard Trieu } 27ad00e83aSRichard Trieu 28ad00e83aSRichard Trieu void test6() { 29ad00e83aSRichard Trieu new int((void)0); 30ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a new value}} 31ad00e83aSRichard Trieu } 32ad00e83aSRichard Trieu 33ad00e83aSRichard Trieu typedef short short2 __attribute__ ((__vector_size__ (2))); 34ad00e83aSRichard Trieu void test10() { 35ad00e83aSRichard Trieu short2 V = { (void)0 }; 36ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a vector element}} 37ad00e83aSRichard Trieu } 38ad00e83aSRichard Trieu 39ad00e83aSRichard Trieu typedef float float2 __attribute__((ext_vector_type(2))); 40ad00e83aSRichard Trieu typedef float float4 __attribute__((ext_vector_type(4))); 41ad00e83aSRichard Trieu 42ad00e83aSRichard Trieu void test14(const float2 in, const float2 out) { 43ad00e83aSRichard Trieu const float4 V = (float4){ in, out }; 44ad00e83aSRichard Trieu // expected-error@-1{{cannot initialize a compound literal initializer}} 45ad00e83aSRichard Trieu } 46*5fe0a42aSRichard Trieu 47*5fe0a42aSRichard Trieu namespace template_test { 48*5fe0a42aSRichard Trieu class S { 49*5fe0a42aSRichard Trieu public: 50*5fe0a42aSRichard Trieu void foo(int); 51*5fe0a42aSRichard Trieu }; 52*5fe0a42aSRichard Trieu 53*5fe0a42aSRichard Trieu template <class P> struct S2 { 54*5fe0a42aSRichard Trieu void (P::*a)(const int &); 55*5fe0a42aSRichard Trieu }; 56*5fe0a42aSRichard Trieu 57*5fe0a42aSRichard Trieu void test_15() { 58*5fe0a42aSRichard Trieu S2<S> X = {&S::foo}; 59*5fe0a42aSRichard Trieu // expected-error@-1{{cannot initialize a member subobject of type 'void (template_test::S::*)(const int &)' with an rvalue of type 'void (template_test::S::*)(int)': type mismatch at 1st parameter ('const int &' vs 'int')}} 60*5fe0a42aSRichard Trieu } 61*5fe0a42aSRichard Trieu } 62