Skip to content

Commit 45b849d

Browse files
committed
OpenMP/C++: Avoid ICE for BIND_EXPR with empty BIND_EXPR_BLOCK [PR120413]
PR c++/120413 gcc/cp/ChangeLog: * semantics.cc (finish_omp_target_clauses_r): Handle BIND_EXPR with empty BIND_EXPR_BLOCK. gcc/testsuite/ChangeLog: * g++.dg/gomp/target-4.C: New test.
1 parent f59ff19 commit 45b849d

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

gcc/cp/semantics.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10565,10 +10565,10 @@ finish_omp_target_clauses_r (tree *tp, int *walk_subtrees, void *ptr)
1056510565

1056610566
if (TREE_CODE (t) == BIND_EXPR)
1056710567
{
10568-
tree block = BIND_EXPR_BLOCK (t);
10569-
for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var))
10570-
if (!data->local_decls.contains (var))
10571-
data->local_decls.add (var);
10568+
if (tree block = BIND_EXPR_BLOCK (t))
10569+
for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var))
10570+
if (!data->local_decls.contains (var))
10571+
data->local_decls.add (var);
1057210572
return NULL_TREE;
1057310573
}
1057410574

gcc/testsuite/g++.dg/gomp/target-4.C

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// { dg-do compile { target c++11 } }
2+
// PR c++/120413
3+
4+
struct S
5+
{
6+
S() {}
7+
~S() {}
8+
};
9+
10+
struct array
11+
{
12+
S _arr[1];
13+
};
14+
15+
int main()
16+
{
17+
#pragma omp target
18+
{
19+
array arr{};
20+
}
21+
return 0;
22+
}

0 commit comments

Comments
 (0)