From: Jakub Jelinek Date: Tue, 6 Jan 2026 07:36:20 +0000 (+0100) Subject: tree-object-size: Deterministic SSA generation [PR123351] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6085ca0ed4cef3bcf4eb382cb71e44219c10f6e;p=thirdparty%2Fgcc.git 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 Marco Falke PR tree-optimization/123351 * tree-object-size.cc (object_sizes_set_temp): Separate calls to make_ssa_name to ensure deterministic execution order. --- diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc index 01a59b8434c..908647b8401 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. */