diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2015-12-03 14:21:39 +0100 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2015-12-03 14:21:39 +0100 |
commit | 0ba8c3f06308f8f6a75abe4130972d2cb32a9abe (patch) | |
tree | 26c4193fda00d6456c75edf52f76f543036f9972 /debug | |
parent | 05f604d7f6e5ca3a0b005ae7ae1073f2b9e83207 (diff) | |
download | compcert-0ba8c3f06308f8f6a75abe4130972d2cb32a9abe.tar.gz compcert-0ba8c3f06308f8f6a75abe4130972d2cb32a9abe.zip |
Fixed regression introduce by merge of PR#69.
Since the identifier of a function definition and of its declaration
are equal we only should remove functions if the function iteself is
removed.
Bug 17724.
Diffstat (limited to 'debug')
-rw-r--r-- | debug/Debug.ml | 3 | ||||
-rw-r--r-- | debug/Debug.mli | 2 | ||||
-rw-r--r-- | debug/DebugInformation.ml | 10 | ||||
-rw-r--r-- | debug/DebugInit.ml | 1 |
4 files changed, 16 insertions, 0 deletions
diff --git a/debug/Debug.ml b/debug/Debug.ml index 789ecb70..775a0903 100644 --- a/debug/Debug.ml +++ b/debug/Debug.ml @@ -48,6 +48,7 @@ type implem = compute_gnu_file_enum: (string -> unit) -> unit; exists_section: section_name -> bool; remove_unused: ident -> unit; + remove_unused_function: ident -> unit; variable_printed: string -> unit; add_diab_info: section_name -> int -> int -> int -> unit; } @@ -79,6 +80,7 @@ let default_implem = compute_gnu_file_enum = (fun _ -> ()); exists_section = (fun _ -> true); remove_unused = (fun _ -> ()); + remove_unused_function = (fun _ -> ()); variable_printed = (fun _ -> ()); add_diab_info = (fun _ _ _ _ -> ()); } @@ -110,5 +112,6 @@ let exists_section sec = !implem.exists_section sec let compute_diab_file_enum end_l entry_l line_e = !implem.compute_diab_file_enum end_l entry_l line_e let compute_gnu_file_enum f = !implem.compute_gnu_file_enum f let remove_unused ident = !implem.remove_unused ident +let remove_unused_function ident = !implem.remove_unused_function ident let variable_printed ident = !implem.variable_printed ident let add_diab_info sec line_start debug_info low_pc = !implem.add_diab_info sec line_start debug_info low_pc diff --git a/debug/Debug.mli b/debug/Debug.mli index 614fe84b..387491c2 100644 --- a/debug/Debug.mli +++ b/debug/Debug.mli @@ -46,6 +46,7 @@ type implem = compute_gnu_file_enum: (string -> unit) -> unit; exists_section: section_name -> bool; remove_unused: ident -> unit; + remove_unused_function: ident -> unit; variable_printed: string -> unit; add_diab_info: section_name -> int -> int -> int -> unit; } @@ -79,5 +80,6 @@ val compute_diab_file_enum: (section_name -> int) -> (string-> int) -> (unit -> val compute_gnu_file_enum: (string -> unit) -> unit val exists_section: section_name -> bool val remove_unused: ident -> unit +val remove_unused_function: ident -> unit val variable_printed: string -> unit val add_diab_info: section_name -> int -> int -> int -> unit diff --git a/debug/DebugInformation.ml b/debug/DebugInformation.ml index ed00ea0d..be322a55 100644 --- a/debug/DebugInformation.ml +++ b/debug/DebugInformation.ml @@ -295,6 +295,16 @@ let gen_comp_typ sou id at = let remove_unused id = try let id' = Hashtbl.find stamp_to_definition id.stamp in + let var = Hashtbl.find definitions id' in + match var with + | Function _ -> () + | _ -> Hashtbl.remove definitions id'; + Hashtbl.remove stamp_to_definition id.stamp + with Not_found -> () + +let remove_unused_function id = + try + let id' = Hashtbl.find stamp_to_definition id.stamp in Hashtbl.remove definitions id'; Hashtbl.remove stamp_to_definition id.stamp with Not_found -> () diff --git a/debug/DebugInit.ml b/debug/DebugInit.ml index 455112ed..17a90536 100644 --- a/debug/DebugInit.ml +++ b/debug/DebugInit.ml @@ -45,6 +45,7 @@ let default_debug = compute_gnu_file_enum = DebugInformation.compute_gnu_file_enum; exists_section = DebugInformation.exists_section; remove_unused = DebugInformation.remove_unused; + remove_unused_function = DebugInformation.remove_unused_function; variable_printed = DebugInformation.variable_printed; add_diab_info = (fun _ _ _ _ -> ()); } |