aboutsummaryrefslogtreecommitdiffstats
path: root/cparser
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2016-08-31 16:36:39 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2016-08-31 16:36:39 +0200
commit8763a45b8a5c6d51d53795573179ba66e479f288 (patch)
treea110a9e65ab1361ac605b127c9479397e5df918c /cparser
parentc7ea6ababa7e57a3b9c529cfc0617072eaed0701 (diff)
downloadcompcert-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
Diffstat (limited to 'cparser')
-rw-r--r--cparser/Cerrors.ml2
-rw-r--r--cparser/Cerrors.mli1
-rw-r--r--cparser/Elab.ml1
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)