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