[gcc r16-6516] tree-object-size: Deterministic SSA generation [PR123351]
Jakub Jelinek
jakub@gcc.gnu.org
Tue Jan 6 07:37:31 GMT 2026
https://gcc.gnu.org/g:c6085ca0ed4cef3bcf4eb382cb71e44219c10f6e
commit r16-6516-gc6085ca0ed4cef3bcf4eb382cb71e44219c10f6e
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Jan 6 08:36:20 2026 +0100
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.
Diff:
---
gcc/tree-object-size.cc | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc
index 01a59b8434ca..908647b84016 100644
--- a/gcc/tree-object-size.cc
+++ b/gcc/tree-object-size.cc
@@ -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. */
More information about the Gcc-cvs
mailing list