diff options
author | Bernhard Schommer <bschommer@users.noreply.github.com> | 2018-03-29 18:12:21 +0200 |
---|---|---|
committer | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2018-03-29 18:12:21 +0200 |
commit | 6b1463c4de3ae182fac6b5f2d15248d87c2f9613 (patch) | |
tree | 01de14c28ceb8c956efb0ffedd8288680d630211 /cparser | |
parent | d1ff2fcb7c2875b3c371a124579aef419199195b (diff) | |
download | compcert-6b1463c4de3ae182fac6b5f2d15248d87c2f9613.tar.gz compcert-6b1463c4de3ae182fac6b5f2d15248d87c2f9613.zip |
Reject casts to struct/union types (#68)
The ISO C99 standard allows cast only if the type name involved
is either a void type or a scalar type.
For compatibility with GCC and Clang we used to support casting
a struct or union to exactly the same struct or union type.
That does not seem useful in practice and complicates conformance
testing. This commit gets rid of this exception to the C99 rule.
Bug 23310
Diffstat (limited to 'cparser')
-rw-r--r-- | cparser/Cutil.ml | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/cparser/Cutil.ml b/cparser/Cutil.ml index 4a5c9427..f3cd5d14 100644 --- a/cparser/Cutil.ml +++ b/cparser/Cutil.ml @@ -1035,9 +1035,6 @@ let valid_cast env tfrom tto = (TInt _ | TPtr _ | TEnum _) -> true (* between int and float types *) | (TInt _ | TFloat _ | TEnum _), (TInt _ | TFloat _ | TEnum _) -> true - (* between identical composites *) - | TStruct(s1, _), TStruct(s2, _) -> s1 = s2 - | TUnion(s1, _), TUnion(s2, _) -> s1 = s2 | _, _ -> false (* Check that the cast from tfrom to tto is an integer to pointer conversion *) |