https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68001
Bug ID: 68001 Summary: [cilkplus] ICE in cp_gimplify_expr, at cp/cp-gimplify.c:760 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ryan.burn at gmail dot com Target Milestone: --- The below code causes the following ICE rnburn@localhost ~/test/gcc_cilk $ c++17 -fcilkplus -lcilkrts t.cpp t.cpp: In function ‘void compute_cilk()’: t.cpp:21:33: error: ‘do_not_optimize_away’ was not declared in this scope do_not_optimize_away(v1.data()); ^ cc1plus: error: invalid use of ‘_Cilk_spawn’ t.cpp:18:26: error: invalid use of ‘_Cilk_spawn’ auto v1 = cilk_spawn f(); ^ t.cpp:18:26: internal compiler error: tree check: expected call_expr or aggr_init_expr, have target_expr in cp_gimplify_expr, at cp/cp-gimplify.c:760 0xf2508c tree_check_failed(tree_node const*, char const*, int, char const*, ...) ../../gcc/gcc/tree.c:9512 0x7fc015 tree_check2(tree_node*, char const*, int, char const*, tree_code, tree_code) ../../gcc/gcc/tree.h:2877 0x7fc015 cp_gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**) ../../gcc/gcc/cp/cp-gimplify.c:760 0xa965c2 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8025 0xaa80b1 gimplify_addr_expr ../../gcc/gcc/gimplify.c:4985 0xa97f09 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8162 0xaa386b gimplify_call_expr ../../gcc/gcc/gimplify.c:2452 0xa97dda gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8087 0xa9bb96 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5526 0xa97e58 gimplify_cleanup_point_expr ../../gcc/gcc/gimplify.c:5302 0xa97e58 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8479 0xa9bb96 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5526 0xa993bb gimplify_statement_list ../../gcc/gcc/gimplify.c:1462 0xa993bb gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8531 0xa9bb96 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5526 0xa99209 gimplify_and_add(tree_node*, gimple_statement_base**) ../../gcc/gcc/gimplify.c:398 0xa99209 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8453 0xa9bb96 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc/gcc/gimplify.c:5526 0xa993bb gimplify_statement_list ../../gcc/gcc/gimplify.c:1462 0xa993bb gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc/gcc/gimplify.c:8531 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. ////////////////////////////////////////////////////////////// #include <cilk/cilk.h> #include <cilk/cilk_api.h> #include <vector> #include <random> #include <cmath> const int N = 100'000'000; auto f() { std::vector<double> v(N); auto rng = std::mt19937{std::random_device{}()}; std::uniform_real_distribution<double> dist(0, 1); for (int i = 0; i < N; ++i) v[i] = std::log(std::sqrt(dist(rng))); return v; } void compute_cilk() { auto v1 = cilk_spawn f(); auto v2 = f(); cilk_sync; do_not_optimize_away(v1.data()); do_not_optimize_away(v2.data()); } int main() { compute_cilk(); return 0; } //////////////////////////////////////////////////////////////