diff options
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/cast-bad-00.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/validation/cast-bad-00.c b/validation/cast-bad-00.c new file mode 100644 index 00000000..5f4a895f --- /dev/null +++ b/validation/cast-bad-00.c @@ -0,0 +1,47 @@ +typedef unsigned short u16; +typedef unsigned int u32; + +union u { + u32 a; + u16 b; +}; + +struct s { + u32 a; + u16 b; +}; + + +void bar(u16, u32); +void union_to_int(u16 val); +void struct_to_int(u16 val); + + +void union_to_int(u16 val) +{ + union u u; + + u.b = val; + bar(u.b, u); +} + +void struct_to_int(u16 val) +{ + struct s s; + + s.b = val; + bar(s.b, s); +} + +/* + * check-name: cast-bad 00 + * + * check-error-start +cast-bad-00.c:25:18: warning: incorrect type in argument 2 (different base types) +cast-bad-00.c:25:18: expected unsigned int [unsigned] [usertype] <noident> +cast-bad-00.c:25:18: got union u [assigned] u +cast-bad-00.c:33:18: warning: incorrect type in argument 2 (different base types) +cast-bad-00.c:33:18: expected unsigned int [unsigned] [usertype] <noident> +cast-bad-00.c:33:18: got struct s [assigned] s + * check-error-end + */ |
