From: Marek Polacek Date: Wed, 25 Sep 2013 07:48:47 +0000 (+0000) Subject: re PR c++/58516 (ICE with __transaction_atomic) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=550dfe7f28a031f5ffe59c423c7790d219414ff6;p=gcc.git re PR c++/58516 (ICE with __transaction_atomic) PR c++/58516 cp/ * semantics.c (finish_transaction_stmt): Check for EXPR_P before setting the expr location. testsuite/ * g++.dg/tm/pr58516.C: New test. From-SVN: r202883 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ec40ed5c061..5cbc070040e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-25 Marek Polacek + + PR c++/58516 + * semantics.c (finish_transaction_stmt): Check for EXPR_P before + setting the expr location. + 2013-09-23 Adam Butcher PR c++/58500 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0299b690fb1..13277948bf4 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5199,7 +5199,9 @@ finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex) { tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt), noex); - SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt))); + /* This may not be true when the STATEMENT_LIST is empty. */ + if (EXPR_P (body)) + SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt))); TREE_SIDE_EFFECTS (body) = 1; TRANSACTION_EXPR_BODY (stmt) = body; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc1f282191b..68e38cc9419 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,8 +1,13 @@ +2013-09-25 Marek Polacek + + PR c++/58516 + * g++.dg/tm/pr58516.C: New test. + 2013-09-24 Kyrylo Tkachov - * lib/target-supports.exp (check_effective_target_arm_cond_exec): - New procedure. - * gcc.target/arm/minmax_minus.c: Check for cond_exec target. + * lib/target-supports.exp (check_effective_target_arm_cond_exec): + New procedure. + * gcc.target/arm/minmax_minus.c: Check for cond_exec target. 2013-09-24 Richard Biener diff --git a/gcc/testsuite/g++.dg/tm/pr58516.C b/gcc/testsuite/g++.dg/tm/pr58516.C new file mode 100644 index 00000000000..b1ada3c8c1d --- /dev/null +++ b/gcc/testsuite/g++.dg/tm/pr58516.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-std=c++11 -fgnu-tm" } + +void foo() +{ + __transaction_atomic noexcept(false) {} +}