On 18/09/2025 15:22, Bruno Haible wrote:
Pádraig Brady wrote:
It's lightweight, so I've added it in my default dev environment,
but it might be worth enabling on CI systems too?

-ftrivial-auto-var-init=pattern appears to initialize e.g.
an integer variable with 0xfefefefe always. This is deterministic.
Therefore, it will _reduce_, not increase, the probability that
I notice a given bug by looking at CI results.

A non-deterministic initialization is better for this purpose.

I think the pattern is chosen depending on base type and platform
to be as non usual/valid as possible.
Also as we've seen zero'd stacks are very common,
as we only noticed the coreutils bug¹ trigger on one of many systems.
I suppose the fixed pattern is chosen as a compromise
to be more likely to trigger bugs, but also avoid "heisenbug"s.

Still, for any given platform, when I see 50 non-deterministic CI runs
in a year, I am more likely to spot a bug than if the initialization is
deterministic.

The defense against zeroed stack contents should be
   -ftrivial-auto-var-init=uninitialized
not
   -ftrivial-auto-var-init=pattern

In the CI, I prefer Heisenbugs to deterministic PASS. It's only while
investigating a failure that I want to get rid of a Heisenbug.

So, if there is an option that we should add in the CI, it is
   -ftrivial-auto-var-init=uninitialized

That's the default behavior I think

Reply via email to