From 0ba8c3f06308f8f6a75abe4130972d2cb32a9abe Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Thu, 3 Dec 2015 14:21:39 +0100 Subject: 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. --- debug/Debug.ml | 3 +++ debug/Debug.mli | 2 ++ debug/DebugInformation.ml | 10 ++++++++++ debug/DebugInit.ml | 1 + 4 files changed, 16 insertions(+) (limited to 'debug') 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 @@ -293,6 +293,16 @@ let gen_comp_typ sou id at = TUnion (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'; 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 _ _ _ _ -> ()); } -- cgit