diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2016-08-31 16:36:39 +0200 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2016-08-31 16:36:39 +0200 |
commit | 8763a45b8a5c6d51d53795573179ba66e479f288 (patch) | |
tree | a110a9e65ab1361ac605b127c9479397e5df918c | |
parent | c7ea6ababa7e57a3b9c529cfc0617072eaed0701 (diff) | |
download | compcert-8763a45b8a5c6d51d53795573179ba66e479f288.tar.gz compcert-8763a45b8a5c6d51d53795573179ba66e479f288.zip |
Added conformance warning.
This warning should be triggered if a feature is used that is not
part of the code CompCert C language.
Bug 18004
-rw-r--r-- | cparser/Cerrors.ml | 2 | ||||
-rw-r--r-- | cparser/Cerrors.mli | 1 | ||||
-rw-r--r-- | cparser/Elab.ml | 1 |
3 files changed, 4 insertions, 0 deletions
diff --git a/cparser/Cerrors.ml b/cparser/Cerrors.ml index 046ca9b0..e1848ffa 100644 --- a/cparser/Cerrors.ml +++ b/cparser/Cerrors.ml @@ -67,6 +67,7 @@ type warning_type = | Return_type | Literal_range | Unknown_pragmas + | CompCert_conformance let active_warnings: warning_type list ref = ref [ Unknown_attribute; @@ -106,6 +107,7 @@ let string_of_warning = function | Return_type -> "return-type" | Literal_range -> "literal-range" | Unknown_pragmas -> "unknown-pragmas" + | CompCert_conformance -> "compcert-conformance" let activate_warning w () = if not (List.mem w !active_warnings) then diff --git a/cparser/Cerrors.mli b/cparser/Cerrors.mli index b547188a..1ef8bb21 100644 --- a/cparser/Cerrors.mli +++ b/cparser/Cerrors.mli @@ -43,6 +43,7 @@ type warning_type = | Return_type (** void return in non-void function *) | Literal_range (** literal ranges *) | Unknown_pragmas (** unknown/unsupported pragma *) + | CompCert_conformance (** features that are not part of the CompCert C core language *) val warning : (string * int) -> warning_type -> ('a, Format.formatter, unit, unit, unit, unit) format6 -> 'a (** [warning (f,c) w fmt arg1 ... argN] formats the arguments [arg1] to [argN] as warining according to diff --git a/cparser/Elab.ml b/cparser/Elab.ml index 29bce36e..621417ed 100644 --- a/cparser/Elab.ml +++ b/cparser/Elab.ml @@ -2186,6 +2186,7 @@ let elab_fundef env spec name defs body loc = | ty, None -> (ty, [],env1) | TFun(ty_ret, None, false, attr), Some params -> + warning loc Cerrors.CompCert_conformance "non-prototype, pre-standard function definition, converting to prototype form"; let (params', extra_decls,env) = elab_KR_function_parameters env params defs loc in (TFun(ty_ret, Some params', inherit_vararg env s sto ty, attr), extra_decls,env) |