diff options
author | Marek Polacek <mpolacek@gcc.gnu.org> | 2013-09-25 07:48:47 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2013-09-25 07:48:47 +0000 |
commit | 550dfe7f28a031f5ffe59c423c7790d219414ff6 (patch) | |
tree | 4cf8e83b7c042a6b7a6eba0f1e6ae6fb83762c51 /gcc | |
parent | 28d18db363050e2e8122d202cd59d131a3ffa167 (diff) | |
download | gcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.zip gcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.tar.gz gcc-550dfe7f28a031f5ffe59c423c7790d219414ff6.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tm/pr58516.C | 7 |
4 files changed, 24 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ec40ed5..5cbc070 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-25 Marek Polacek <polacek@redhat.com> + + PR c++/58516 + * semantics.c (finish_transaction_stmt): Check for EXPR_P before + setting the expr location. + 2013-09-23 Adam Butcher <adam@jessamine.co.uk> PR c++/58500 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0299b69..1327794 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 dc1f282..68e38cc9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,8 +1,13 @@ +2013-09-25 Marek Polacek <polacek@redhat.com> + + PR c++/58516 + * g++.dg/tm/pr58516.C: New test. + 2013-09-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com> - * 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 <rguenther@suse.de> diff --git a/gcc/testsuite/g++.dg/tm/pr58516.C b/gcc/testsuite/g++.dg/tm/pr58516.C new file mode 100644 index 0000000..b1ada3c --- /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) {} +} |