Skip to content

Commit 5aecefe

Browse files
committed
More prudent analysis of uninitialized const global variables.
In the presence of separate compilation and linking, an uninitialized const global variable may be initialized elsewhere with a pointer value, falsifying the points-to analysis. Report and fix by Chung-Kil Hur and Jeehoon Kang.
1 parent 06841a5 commit 5aecefe

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

backend/ValueAnalysis.v

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ Definition alloc_global (rm: romem) (idg: ident * globdef fundef unit): romem :=
186186
PTree.remove id rm
187187
| (id, Gvar v) =>
188188
if v.(gvar_readonly) && negb v.(gvar_volatile)
189+
&& match v.(gvar_init) with nil => false | _ => true end
189190
then PTree.set id (store_init_data_list (ablock_init Pbot) 0 v.(gvar_init)) rm
190191
else PTree.remove id rm
191192
end.
@@ -1677,13 +1678,15 @@ Proof.
16771678
destruct (peq id id1). congruence. eapply H; eauto.
16781679
- rewrite PTree.gsspec in H0. destruct (peq id id1).
16791680
+ inv H0. rewrite PTree.gss.
1680-
destruct (gvar_readonly v1 && negb (gvar_volatile v1)) eqn:RO.
1681-
InvBooleans. rewrite negb_true_iff in H2.
1681+
destruct (gvar_readonly v1 && negb (gvar_volatile v1) &&
1682+
match gvar_init v1 with nil => false | _ => true end) eqn:RO.
1683+
InvBooleans. rewrite negb_true_iff in H4.
16821684
rewrite PTree.gss in H1.
16831685
exists v1. intuition congruence.
16841686
rewrite PTree.grs in H1. discriminate.
16851687
+ rewrite PTree.gso. eapply H; eauto.
1686-
destruct (gvar_readonly v1 && negb (gvar_volatile v1)).
1688+
destruct (gvar_readonly v1 && negb (gvar_volatile v1) &&
1689+
match gvar_init v1 with nil => false | _ => true end).
16871690
rewrite PTree.gso in H1; auto.
16881691
rewrite PTree.gro in H1; auto.
16891692
apply Plt_ne. eapply Genv.genv_symb_range; eauto.

0 commit comments

Comments
 (0)