diff --git a/jbmc/regression/jbmc/phi-merge_uninitialized_values/field.desc b/jbmc/regression/jbmc/phi-merge_uninitialized_values/field.desc index 043877a2083..c8b31367dd6 100644 --- a/jbmc/regression/jbmc/phi-merge_uninitialized_values/field.desc +++ b/jbmc/regression/jbmc/phi-merge_uninitialized_values/field.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\) -^.*\?\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/jbmc/regression/jbmc/phi-merge_uninitialized_values/local.desc b/jbmc/regression/jbmc/phi-merge_uninitialized_values/local.desc index 00d1f483af2..ffecc6b861b 100644 --- a/jbmc/regression/jbmc/phi-merge_uninitialized_values/local.desc +++ b/jbmc/regression/jbmc/phi-merge_uninitialized_values/local.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\) -^.*\?\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/jbmc/regression/jbmc/phi-merge_uninitialized_values/static_field.desc b/jbmc/regression/jbmc/phi-merge_uninitialized_values/static_field.desc index 09065cbb5c6..0bde955924f 100644 --- a/jbmc/regression/jbmc/phi-merge_uninitialized_values/static_field.desc +++ b/jbmc/regression/jbmc/phi-merge_uninitialized_values/static_field.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\) -^.*\?\s+(dynamic_object|new_tmp)[0-9]+(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/regression/cbmc/phi-merge_uninitialized_values/dynamic.desc b/regression/cbmc/phi-merge_uninitialized_values/dynamic.desc index a6a1dbd4839..94054b4d376 100644 --- a/regression/cbmc/phi-merge_uninitialized_values/dynamic.desc +++ b/regression/cbmc/phi-merge_uninitialized_values/dynamic.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+dynamic_object[0-9]+(@[0-9]+)?#0\) -^.*\?\s+dynamic_object[0-9]+(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/regression/cbmc/phi-merge_uninitialized_values/global.desc b/regression/cbmc/phi-merge_uninitialized_values/global.desc index 95483b1acfb..5891ab3a6bb 100644 --- a/regression/cbmc/phi-merge_uninitialized_values/global.desc +++ b/regression/cbmc/phi-merge_uninitialized_values/global.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+global(@[0-9]+)?#0\) -^.*\?\s+global(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/regression/cbmc/phi-merge_uninitialized_values/local.desc b/regression/cbmc/phi-merge_uninitialized_values/local.desc index 459d31c32b0..d588bf234e2 100644 --- a/regression/cbmc/phi-merge_uninitialized_values/local.desc +++ b/regression/cbmc/phi-merge_uninitialized_values/local.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+local(@[0-9]+)?#0\) -^.*\?\s+local(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/regression/cbmc/phi-merge_uninitialized_values/static_local.desc b/regression/cbmc/phi-merge_uninitialized_values/static_local.desc index ce1ed0f81c8..0896809ce1d 100644 --- a/regression/cbmc/phi-merge_uninitialized_values/static_local.desc +++ b/regression/cbmc/phi-merge_uninitialized_values/static_local.desc @@ -5,8 +5,8 @@ activate-multi-line-match ^EXIT=0$ ^SIGNAL=0$ -- -^.*:\s+staticLocal(@[0-9]+)?#0\) -^.*\?\s+staticLocal(@[0-9]+)?#0\s+: +\([^\s]+guard[^\s]+ \? [^\s]+#0 : [^\s]+\) +\([^\s]+guard[^\s]+ \? [^\s]+ : [^\s]+#0\) -- These regexes are making sure that a variable of generation 0 dosen't appear in a phi merge, so the below statement: diff --git a/src/goto-symex/symex_goto.cpp b/src/goto-symex/symex_goto.cpp index ab10ac07777..2a8989cda9a 100644 --- a/src/goto-symex/symex_goto.cpp +++ b/src/goto-symex/symex_goto.cpp @@ -476,15 +476,17 @@ static void merge_names( // 1. Either guard is false, so we can't follow that branch. // 2. Either identifier is of generation zero, and so hasn't been // initialized and therefore an invalid target. + + // These rules only apply to dynamic objects and locals. if(dest_state.guard.is_false()) rhs = goto_state_rhs; else if(goto_state.guard.is_false()) rhs = dest_state_rhs; - else if(goto_count == 0 && symbol.value.is_not_nil()) + else if(goto_count == 0 && !symbol.is_static_lifetime) { rhs = dest_state_rhs; } - else if(dest_count == 0 && symbol.value.is_not_nil()) + else if(dest_count == 0 && !symbol.is_static_lifetime) { rhs = goto_state_rhs; }