On Wed, 11 Dec 2024 21:14:04 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:
> This is a retry to add `-ftrivial-auto-var-init=pattern` to gcc debug builds. > The first attempt was buggy in multiple ways and had to be backed out. > > This is the description of the original bug report: > > gcc12 has added -ftrivial-auto-var-init=<choice>, which specifies how > automatic variables without an initializer should be initialized. The default > choice is "uninitialized", which is the default C/C++ behavior. Alternatives > are "pattern" and "zero". For improved debugging, helping to detect > uninitialized uses, the "pattern" choice should be used. @kimbarrett I'd like your help with this. I'm not really happy with just disabling a warning for a gtest file like this. There is a piece of code in `test/hotspot/gtest/utilities/test_tribool.cpp` that gcc gets hung up on when enabling this flag. I can't really see that there is anything wrong with the code, and I think gcc is overreacting/buggy. I tried to work around it by creating and assigning to temporary variables, casting etc, but I did not manage to outsmart the compiler. The problematic code is this: // test fill_in(beg, end) TriBool Vec[4]; Vec[0] = TriBool(); Vec[1] = TriBool(); Vec[2] = true; Vec[3] = false; control_words.fill_in(&Vec[0], Vec + 4); gcc will complain on the first line, the `Vec` declaration, but that is somewhat of a red herring; the actual issue is when it is trying to do `&Vec[0` later on in the call to `fill_in`. If I replace that with a `nullptr`, it compiles fine. (But of course the test does not work then...) Funnily enough, the flag managed to find another test where there indeed was a possible use before initialization issue. (Even if I guess the variable in question was only written to, never read, so in practice it worked, but it does not look good.) @kimbarrett Actually, I am not sure we can turn this flag on. I get this: In file included from $WORKSPAE/open/src/jdk.incubator.vector/linux/native/libsleef/lib/vector_math_sve.c:32: $WORKSPAE/open/src/jdk.incubator.vector/linux/native/libsleef/lib/../generated/sleefinline_sve.h: In function 'Sleef_tanfx_u10sve': $WORKSPAE/open/src/jdk.incubator.vector/linux/native/libsleef/lib/../generated/sleefinline_sve.h:5400:21: sorry, unimplemented: __builtin_clear_padding not supported for variable length aggregates 5400 | vfloat2_sve_sleef s, t, x; | ^ I could possibly try and override libsleef with `-ftrivial-auto-var-init=uninitialized`, but I'm not sure this is a good idea. Also, someone should report a bug to upstream gcc about the `sorry, unimplemented` stuff. ------------- PR Comment: https://git.openjdk.org/jdk/pull/22691#issuecomment-2537217402 PR Comment: https://git.openjdk.org/jdk/pull/22691#issuecomment-2537323650 PR Comment: https://git.openjdk.org/jdk/pull/22691#issuecomment-2538594492