https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95869
Bug ID: 95869 Summary: ICE when "target parallel" construct used with "if" clause in Fortran Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: kcy at codesourcery dot com Target Milestone: --- Compiling the following program results in an ICE: program target_parallel_if implicit none integer, parameter :: N = 100 integer, parameter :: LIMIT = 60 integer :: i, j integer, dimension(N) :: a = (/ (i, i = 1,N) /) do j = 1, N !$omp target parallel if(j .lt. LIMIT) map(tofrom: a(1:N)) do i = 1, N a(i) = a(i) + 1 end do !$omp end target parallel end do end program $ x86_64-none-linux-gnu-gfortran target_parallel_if.f90 -O -fopenmp -S -o target_parallel_if.s target_parallel_if.f90:9:0: 9 | !$omp target parallel if(j .lt. LIMIT) map(tofrom: a(1:N)) | internal compiler error: in gimplify_var_or_parm_decl, at gimplify.c:2830 0xf6c765 gimplify_var_or_parm_decl /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:2830 0xf9efdc gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:14071 0xf76084 gimplify_modify_expr /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:5782 0xf9d09b gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:13612 0xf7a44b gimplify_stmt(tree_node**, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:6825 0xf696fc gimplify_statement_list /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:1869 0xf9ef01 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:14055 0xf7a44b gimplify_stmt(tree_node**, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:6825 0xf67d53 gimplify_bind_expr /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:1424 0xf9ddfc gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:13812 0xf7a44b gimplify_stmt(tree_node**, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:6825 0xf696fc gimplify_statement_list /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:1869 0xf9ef01 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:14055 0xf7a44b gimplify_stmt(tree_node**, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:6825 0xf67d53 gimplify_bind_expr /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:1424 0xf9ddfc gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:13812 0xf7a44b gimplify_stmt(tree_node**, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:6825 0xf65136 gimplify_and_add(tree_node*, gimple**) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:486 0xf6960a gimplify_loop_expr /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:1843 0xf9de1d gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/gimplify.c:13816 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://sourcery.mentor.com/GNUToolchain/> for instructions. The issue seems to have been present since GCC 8. In GCC 7, it also ICEs but with a different backtrace: $ x86_64-none-linux-gnu-gfortran target_parallel_if.f90 -O -fopenmp -S -o target_parallel_if.s f951: internal compiler error: in parse_omp_structured_block, at fortran/parse.c:5096 0x89fec2 parse_omp_structured_block /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:5096 0x8a02f5 parse_executable /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:5345 0x89f541 parse_do_block /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:4649 0x8a0280 parse_executable /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:5299 0x8a0c04 parse_progunit /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:5659 0x8a1af4 gfc_parse_file() /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/parse.c:6161 0x8f89f1 gfc_be_parse_file /scratch/kyeung/openacc/trunk/src/gcc-mainline/gcc/fortran/f95-lang.c:204 The problem does not occur if the 'target parallel' is changed to 'target parallel do', or if the 'if' clause is omitted. An equivalent program in C also does not trigger the ICE.