xref: /llvm-project/clang/test/SemaCXX/err_init_conversion_failed.cpp (revision 32d832af98e917c1f2b58c165107bcb88bddc6e0)
1ad00e83aSRichard Trieu // RUN: %clang_cc1 -fsyntax-only -verify %s
2ad00e83aSRichard Trieu 
test0()3ad00e83aSRichard Trieu void test0() {
4ad00e83aSRichard Trieu   char variable = (void)0;
5ad00e83aSRichard Trieu   // expected-error@-1{{cannot initialize a variable}}
6ad00e83aSRichard Trieu }
7ad00e83aSRichard Trieu 
test1(int x=(void)0)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 
test2()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 {
S4S418ad00e83aSRichard Trieu   S4() : x((void)0) {};
19ad00e83aSRichard Trieu   // expected-error@-1{{cannot initialize a member subobject}}
20ad00e83aSRichard Trieu   int x;
21ad00e83aSRichard Trieu };
22ad00e83aSRichard Trieu 
test5()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 
test6()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)));
test10()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 
test14(const float2 in,const float2 out)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 }
465fe0a42aSRichard Trieu 
475fe0a42aSRichard Trieu namespace template_test {
485fe0a42aSRichard Trieu class S {
495fe0a42aSRichard Trieu public:
505fe0a42aSRichard Trieu    void foo(int);
515fe0a42aSRichard Trieu };
525fe0a42aSRichard Trieu 
535fe0a42aSRichard Trieu template <class P> struct S2 {
545fe0a42aSRichard Trieu   void (P::*a)(const int &);
555fe0a42aSRichard Trieu };
565fe0a42aSRichard Trieu 
test_15()575fe0a42aSRichard Trieu void test_15() {
585fe0a42aSRichard Trieu   S2<S> X = {&S::foo};
59*32d832afSNAKAMURA Takumi   // expected-error-re@-1{{cannot initialize a member subobject of type 'void (template_test::S::*)(const int &){{( __attribute__\(\(thiscall\)\))?}}' with an rvalue of type 'void (template_test::S::*)(int){{( __attribute__\(\(thiscall\)\))?}}': type mismatch at 1st parameter ('const int &' vs 'int')}}
605fe0a42aSRichard Trieu }
615fe0a42aSRichard Trieu }
62