From 61869eecdc52c13b97f22a5aeec799e216d45834 Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Mon, 11 Mar 2019 19:16:01 +0100 Subject: [PATCH] [kernel] keep appropriate information about used suffixes in alpha conv tables --- src/kernel_internals/typing/alpha.ml | 5 ++++- src/kernel_internals/typing/cabs2cil.ml | 15 ++++++++++++++- tests/syntax/rename.i | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/kernel_internals/typing/alpha.ml b/src/kernel_internals/typing/alpha.ml index fd3269331a1..66f32b2e3e9 100644 --- a/src/kernel_internals/typing/alpha.ml +++ b/src/kernel_internals/typing/alpha.ml @@ -202,11 +202,14 @@ let alphaWorker ~(alphaTable: 'a alphaTable) find_unused_suffix (Integer.succ min) infix infixes suffixes in let newsuffix = make_suffix newmin in + let newinfix = make_full_suffix infix newmin in + Kernel.( + debug ~dkey:dkey_alpha "New suffix: %s" newsuffix); let base = if is_generated_name prefix then prefix else lookupname in H.add - infixes newsuffix + infixes newinfix (ref (Integer.minus_one, [(Integer.minus_one, data)])); (match undolist with | Some l -> l:= AlphaAddedSuffix (prefix,newsuffix)::!l diff --git a/src/kernel_internals/typing/cabs2cil.ml b/src/kernel_internals/typing/cabs2cil.ml index b72e5035f82..31b0267bff2 100644 --- a/src/kernel_internals/typing/cabs2cil.ml +++ b/src/kernel_internals/typing/cabs2cil.ml @@ -3841,10 +3841,23 @@ let exitScope () = | UndoRemoveFromEnv n :: t -> H.remove env n; loop t | UndoRemoveFromAlphaTable (p,i) :: t -> + Kernel.( + debug ~dkey:dkey_alpha_undo + "Removing %s %s from alpha table\n" p i); (try let h = H.find alphaTable p in H.remove h i; - if H.length h = 0 then H.remove alphaTable p + let l = H.length h in + if l = 0 then begin + H.remove alphaTable p; + Kernel.( + debug ~dkey:dkey_alpha_undo "No suffix for %s anymore" p) + end else begin + Kernel.( + debug ~dkey:dkey_alpha_undo "%d suffixes remaining@\n%t" l + (fun fmt -> + H.iter (fun i _ -> Format.fprintf fmt "%s@ " i) h)) + end with Not_found -> Kernel.warning "prefix (%s,%s) not in alpha conversion table. \ diff --git a/tests/syntax/rename.i b/tests/syntax/rename.i index 08a549ccc24..86a78d54789 100644 --- a/tests/syntax/rename.i +++ b/tests/syntax/rename.i @@ -39,6 +39,20 @@ void f4(int *j_0_1) { j_0_1+=j_0; } } +void f5() { + { int y_0; } + int y_0; +} + +int y_0; + +void f6() { + { int y_2; } + int y_2; +} + +int y_1; + struct not_anon { int __anonCompField1; }; -- GitLab