From 4a8f7dc7e9f3f57f08cca9ca2de19214cbe4dc77 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Thu, 9 Feb 2017 15:54:31 +0100 Subject: Extended unused vars check for params. The test now also checks whether the parameter are used at all in the function body. Bug 19872 --- cparser/Cerrors.ml | 6 +++++- cparser/Cerrors.mli | 1 + cparser/Checks.ml | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cparser/Cerrors.ml b/cparser/Cerrors.ml index 8b2a4cd5..34fc4fcf 100644 --- a/cparser/Cerrors.ml +++ b/cparser/Cerrors.ml @@ -89,6 +89,7 @@ type warning_type = | CompCert_conformance | Inline_asm_sdump | Unused_variable + | Unused_parameter (* List of active warnings *) let active_warnings: warning_type list ref = ref [ @@ -137,6 +138,7 @@ let string_of_warning = function | CompCert_conformance -> "compcert-conformance" | Inline_asm_sdump -> "inline-asm-sdump" | Unused_variable -> "unused-variable" + | Unused_parameter -> "unused-parameter" (* Activate the given warning *) let activate_warning w () = @@ -181,7 +183,8 @@ let wall () = Unknown_pragmas; CompCert_conformance; Inline_asm_sdump; - Unused_variable + Unused_variable; + Unused_parameter ] let wnothing () = @@ -373,6 +376,7 @@ let warning_options = error_option CompCert_conformance @ error_option Inline_asm_sdump @ error_option Unused_variable @ + error_option Unused_parameter @ [Exact ("-Wfatal-errors"), Set error_fatal; Exact ("-fdiagnostics-color"), Ignore; (* Either output supports it or no color *) Exact ("-fno-diagnostics-color"), Unset color_diagnostics; diff --git a/cparser/Cerrors.mli b/cparser/Cerrors.mli index fb987bca..c351443c 100644 --- a/cparser/Cerrors.mli +++ b/cparser/Cerrors.mli @@ -46,6 +46,7 @@ type warning_type = | CompCert_conformance (** features that are not part of the CompCert C core language *) | Inline_asm_sdump (** inline assembler used in combination of sdump *) | Unused_variable (** unused local variables *) + | Unused_parameter (** unused function parameter *) 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/Checks.ml b/cparser/Checks.ml index 5ce51aba..dc08e254 100644 --- a/cparser/Checks.ml +++ b/cparser/Checks.ml @@ -167,5 +167,7 @@ let unused_variables p = | Gfundef fd -> let dec_env,used_env = vars_used_stmt (IdentMap.empty,IdentSet.empty) fd.fd_body in IdentMap.iter (fun id loc -> if not (IdentSet.mem id used_env) then - warning loc Unused_variable "unused variable '%s'" id.name) dec_env + warning loc Unused_variable "unused variable '%s'" id.name) dec_env; + List.iter (fun (id,_) -> if not (IdentSet.mem id used_env) then + warning g.gloc Unused_parameter "unused parameter '%s'" id.name) fd.fd_params | _ -> ()) p -- cgit