aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Schommer <bschommer@users.noreply.github.com>2018-03-29 18:12:21 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2018-03-29 18:12:21 +0200
commit6b1463c4de3ae182fac6b5f2d15248d87c2f9613 (patch)
tree01de14c28ceb8c956efb0ffedd8288680d630211
parentd1ff2fcb7c2875b3c371a124579aef419199195b (diff)
downloadcompcert-kvx-6b1463c4de3ae182fac6b5f2d15248d87c2f9613.tar.gz
compcert-kvx-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
-rw-r--r--cparser/Cutil.ml3
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 *)