1 /* $NetBSD: expr_cast.c,v 1.3 2021/08/03 18:44:33 rillig Exp $ */ 2 # 3 "expr_cast.c" 3 4 /* 5 * Tests for value conversion using a cast-expression. 6 * 7 * K&R C does not mention any restrictions on the target type. 8 * C90 requires both the source type and the target type to be scalar. 9 * 10 * GCC allows casting to a struct type but there is no documentation about 11 * it at https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html. See 12 * c-typeck.c, function build_c_cast, RECORD_OR_UNION_TYPE_P. 13 */ 14 15 /* lint1-flags: -Sw */ 16 17 struct S { 18 int member; 19 }; 20 21 struct S 22 cast(void) 23 { 24 struct S { 25 double incompatible; 26 } local = { 27 0.0 28 }; 29 30 /* expect+2: error: invalid cast from 'struct S' to 'struct S' [147] */ 31 /* expect+1: warning: function 'cast' expects to return value [214] */ 32 return (struct S)local; 33 } 34