mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
tree-object-size: Deterministic SSA generation [PR123351]
The order of evaluation of function arguments is unspecified in C++. The function object_sizes_set_temp called object_sizes_set with two calls to make_ssa_name() as arguments. Since make_ssa_name() has the side effect of incrementing the global SSA version counter, different architectures of the same compiler evaluated these calls in different orders. This resulted in non-deterministic SSA version numbering between x86_64 and aarch64 hosts during cross-compilation, leading to divergent object files. Sequencing the calls into separate statements ensures deterministic evaluation order. 2026-01-06 Jakub Jelinek <jakub@redhat.com> Marco Falke <falke.marco@gmail.com> PR tree-optimization/123351 * tree-object-size.cc (object_sizes_set_temp): Separate calls to make_ssa_name to ensure deterministic execution order.
This commit is contained in:
committed by
Jakub Jelinek
parent
e32c3fb431
commit
c6085ca0ed
@@ -322,9 +322,11 @@ object_sizes_set_temp (struct object_size_info *osi, unsigned varno)
|
||||
tree val = object_sizes_get (osi, varno);
|
||||
|
||||
if (size_initval_p (val, osi->object_size_type))
|
||||
object_sizes_set (osi, varno,
|
||||
make_ssa_name (sizetype),
|
||||
make_ssa_name (sizetype));
|
||||
{
|
||||
val = make_ssa_name (sizetype);
|
||||
tree wholeval = make_ssa_name (sizetype);
|
||||
object_sizes_set (osi, varno, val, wholeval);
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize OFFSET_LIMIT variable. */
|
||||
|
||||
Reference in New Issue
Block a user