https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120327

            Bug ID: 120327
           Summary: OpenMP, triangular collapsed for-loop,
                    maybe-uninitialized warning
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jukka.suomela at aalto dot fi
  Target Milestone: ---

Created attachment 61458
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61458&action=edit
Source code

It seems that when compiling OpenMP code with collapsed triangular for-loops
with optimization levels -O or -Og, I get the warning "'({anonymous})' may be
used uninitialized".

Moreover, it seems that "#pragma GCC diagnostic ignored" cannot be used to
silence this warning or turn it into a non-error (if I have -Werror enabled).

Source code:
----
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"

int main(void) {
    int n = 100;
    #pragma omp parallel for collapse(2)
    for (int i = 0; i < n; ++i) {
        for (int j = i; j < n; ++j) {
        }
    }
}
----

Compiler output:
----
% gcc-14 -Wall -Werror -fopenmp -O test.c
In function 'main._omp_fn.0':
cc1: error: '({anonymous})' may be used uninitialized
[-Werror=maybe-uninitialized]
cc1: all warnings being treated as errors

% gcc-12 -Wall -Werror -fopenmp -O test.c
In function 'main._omp_fn.0':
cc1: error: '({anonymous})' may be used uninitialized
[-Werror=maybe-uninitialized]
cc1: all warnings being treated as errors

% gcc-11 -Wall -Werror -fopenmp -Og test.c
test.c: In function 'main._omp_fn.0':
cc1: error: '({anonymous})' may be used uninitialized in this function
[-Werror=maybe-uninitialized]
cc1: all warnings being treated as errors
----

Compiler versions:
----
% gcc-14 --version
gcc-14 (Homebrew GCC 14.2.0_1) 14.2.0
% gcc-12 --version
gcc-12 (Homebrew GCC 12.4.0) 12.4.0
% gcc-11 --version
gcc-11 (Homebrew GCC 11.5.0) 11.5.0
----

System: aarch64-apple-darwin24, macOS 15.4.1 (but this doesn't seem to be
important, as I can reproduce this also on x86 Intel Linux).

The main problem for me is that #pragma GCC diagnostic ignored is not working,
so this leads to challenges in workflows that use -Werror.

Reply via email to