cast-to-union.c revision 6ed2ef8281e44fdd8f002d1cbe11668068d3e530
1eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon// RUN: clang -fsyntax-only -verify -pedantic %s 2eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon 3eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeonunion u { int i; }; 4eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeonvoid f(union u); 5eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon 6eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeonvoid test(int x) { 7eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon f((union u)x); // expected-warning {{C99 forbids casts to union type}} 8eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon f((union u)&x); // expected-error {{cast to union type from type 'int *' not present in union}} 9eff2cd58a897379c7fc46e83447d4619d6f6e9caSeo Sanghyeon} 106ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopes 116ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesunion u w = (union u)2; // expected-warning {{C99 forbids casts to union type}} 126ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesunion u ww = (union u)1.0; // expected-error{{cast to union type from type 'double' not present in union}} 136ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesunion u x = 7; // expected-error{{incompatible type initializing 'int', expected 'union u'}} 146ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesint i; 156ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesunion u zz = (union u)i; // expected-error{{initializer element is not a compile-time constant}} expected-warning {{C99 forbids casts to union type}} 166ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopes 176ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesstruct s {int a, b;}; 186ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesstruct s y = { 1, 5 }; 196ed2ef8281e44fdd8f002d1cbe11668068d3e530Nuno Lopesstruct s z = (struct s){ 1, 5 }; 20