aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/Diagnostics.mli
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2019-07-04 12:59:33 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2019-07-04 12:59:33 +0200
commitdebbae89f9faf47b95bd1c86058cd232783f3c3f (patch)
treec98aa4f51c5e80f5f01e74ffe07958d4632667f6 /cparser/Diagnostics.mli
parented2318e287c6edeeceed7e2a104195b08aa3e31a (diff)
downloadcompcert-kvx-debbae89f9faf47b95bd1c86058cd232783f3c3f.tar.gz
compcert-kvx-debbae89f9faf47b95bd1c86058cd232783f3c3f.zip
Added new diagnostic for non-linear conditionals
The new diagnostics is triggered if a conditional is used that may not be transformed into linear code by the later by the if conversion. The new diagnostic is emitted if a conditional may contain an unsafe expression or is contained within another conditional, logical and or logical or expression. An expression is unsafe if it contains a call, changes memory or if its evaluation leads to undefined behavior, for example division and modulo. Also fixes a small typo in a comment in Cutil.
Diffstat (limited to 'cparser/Diagnostics.mli')
-rw-r--r--cparser/Diagnostics.mli4
1 files changed, 4 insertions, 0 deletions
diff --git a/cparser/Diagnostics.mli b/cparser/Diagnostics.mli
index 6a3c11c8..0f0a0ea5 100644
--- a/cparser/Diagnostics.mli
+++ b/cparser/Diagnostics.mli
@@ -55,6 +55,7 @@ type warning_type =
| Flexible_array_extensions (** usange of structs with flexible arrays in structs and arrays *)
| Tentative_incomplete_static (** static tentative definition with incomplete type *)
| Reduced_alignment (** alignment reduction *)
+ | Non_linear_cond_expr (** condition that cannot be linearized *)
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
@@ -95,3 +96,6 @@ val file_loc : string -> string * int
val error_summary : unit -> unit
(** Print a summary containing the numbers of errors encountered *)
+
+val active_warning : warning_type -> bool
+(** Test whether a warning is active to avoid costly checks *)