aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2018-10-18 16:49:34 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2018-10-18 16:49:34 +0200
commit791971d203068a032477c7627cc97c06fac95da2 (patch)
treec6be9580aa28303d9c034c8a080f8f96d25fcd2d
parent020be062488d755236f296fff760c7491e11997b (diff)
downloadcompcert-791971d203068a032477c7627cc97c06fac95da2.tar.gz
compcert-791971d203068a032477c7627cc97c06fac95da2.zip
Catch exception from elab_attr_arg.
Catch the exception from a non constant argument of a packed attribute and print an error. Bug 24748
-rw-r--r--cparser/Elab.ml5
1 files changed, 4 insertions, 1 deletions
diff --git a/cparser/Elab.ml b/cparser/Elab.ml
index 718261b4..8f27b2a0 100644
--- a/cparser/Elab.ml
+++ b/cparser/Elab.ml
@@ -535,8 +535,11 @@ let elab_attribute env = function
(List.flatten
(List.map (elab_gcc_attr loc env) l)))
| PACKED_ATTR (args, loc) ->
- enter_gcc_attr loc
+ begin try
+ enter_gcc_attr loc
(Attr("__packed__", List.map (elab_attr_arg loc env) args))
+ with Wrong_attr_arg -> error loc "ill-formed 'packed' attribute"; []
+ end
| ALIGNAS_ATTR ([a], loc) ->
warning loc Celeven_extension "'_Alignas' is a C11 extension";
begin match elab_attr_arg loc env a with