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

            Bug ID: 119370
           Summary: [15 Regression][OpenMP] ICE in gimple_add_tmp_var, at
                    gimplify.cc:834 for omptest's xt-declare-target-ctors
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code, openmp
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
  Target Milestone: ---

This is a GCC 15 regression, at least GCC 15 seems to work.

g++ -fopenmp -Wall xt-declare-target-ctors/test.cpp

xt-declare-target-ctors/test.cpp: In function ‘void
__omp_target_static_init_and_destruction_0()’:
xt-declare-target-ctors/test.cpp:103:9: internal compiler error: in
gimple_add_tmp_var, at gimplify.cc:834
  103 | SSD sd[3];
      |         ^

The testcase is from omptest, which is available at:
*
https://github.com/doru1004/omptests/blob/main/xt-declare-target-ctors/test.cpp
* attachment 60500 "testcase (not preprocessed though)"

The attachment is for PR 118876 that fixed an ICE related to that test (in
cp/decl.cc's register_dtor_fn), but unfortunately only to the reduced testcase.


The full testcase still gives an ICE, albeit a different/later one one:

xt-declare-target-ctors/test.cpp: In function ‘void
__omp_target_static_init_and_destruction_0()’:
xt-declare-target-ctors/test.cpp:103:9: internal compiler error: in
gimple_add_tmp_var, at gimplify.cc:834
  103 | SSD sd[3];
      |         ^
0x2951ddf internal_error(char const*, ...)
        /home/tob/repos/gcc/gcc/diagnostic-global-context.cc:517
0xabe22d fancy_abort(char const*, int, char const*)
        /home/tob/repos/gcc/gcc/diagnostic.cc:1722
0x8f6d7e gimple_add_tmp_var(tree_node*)
        /home/tob/repos/gcc/gcc/gimplify.cc:834
0x1101281 gimplify_target_expr
        /home/tob/repos/gcc/gcc/gimplify.cc:8185
0x10f323a gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/tob/repos/gcc/gcc/gimplify.cc:19713
0x10f4466 gimplify_stmt(tree_node**, gimple**)
        /home/tob/repos/gcc/gcc/gimplify.cc:8278
0x10f294b gimplify_statement_list
        /home/tob/repos/gcc/gcc/gimplify.cc:2285
0x10f294b gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        /home/tob/repos/gcc/gcc/gimplify.cc:19761
0x10f333b gimplify_cleanup_point_expr
        /home/tob/repos/gcc/gcc/gimplify.cc:8278

* * *

The failing assert is:

832     gimple_add_tmp_var (tree tmp)
833     {
834       gcc_assert (!DECL_CHAIN (tmp) && !DECL_SEEN_IN_BIND_EXPR_P (tmp));

 <var_decl 0x7ffff71335f0 D.5728
    type <integer_type 0x7ffff7228738 long int public DI

That's for

#2  0x0000000001101282 in gimplify_target_expr (...) gimplify.cc:8185
8185              gimple_add_tmp_var (temp);

(gdb) p debug(*expr_p)
TARGET_EXPR <D.5728, 2>

Reply via email to