aboutsummaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2015-12-03 14:21:39 +0100
committerBernhard Schommer <bernhardschommer@gmail.com>2015-12-03 14:21:39 +0100
commit0ba8c3f06308f8f6a75abe4130972d2cb32a9abe (patch)
tree26c4193fda00d6456c75edf52f76f543036f9972 /debug
parent05f604d7f6e5ca3a0b005ae7ae1073f2b9e83207 (diff)
downloadcompcert-kvx-0ba8c3f06308f8f6a75abe4130972d2cb32a9abe.tar.gz
compcert-kvx-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.ml3
-rw-r--r--debug/Debug.mli2
-rw-r--r--debug/DebugInformation.ml10
-rw-r--r--debug/DebugInit.ml1
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 _ _ _ _ -> ());
}