aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-09-02 08:54:04 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2006-09-02 08:54:04 +0200
commit07515729e96d9c36052b6894c3c49afa8a2582b7 (patch)
tree9b7c48e9461ca34a3b64ee0d02f58debc7ffdf47
parentb2a06efa610db53a7d1840649128f70c8bc10ae8 (diff)
downloadgcc-07515729e96d9c36052b6894c3c49afa8a2582b7.zip
gcc-07515729e96d9c36052b6894c3c49afa8a2582b7.tar.gz
gcc-07515729e96d9c36052b6894c3c49afa8a2582b7.tar.bz2
re PR c++/28878 (ICE using "[" instead of "{")
PR c++/28878 * except.c (build_throw): Only set current_function_returns_abnormally if cfun is not NULL. * g++.dg/parse/crash33.C: New test. From-SVN: r116655
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/except.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/crash33.C8
4 files changed, 19 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5f37dde..4709c14 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2006-09-02 Jakub Jelinek <jakub@redhat.com>
+ PR c++/28878
+ * except.c (build_throw): Only set current_function_returns_abnormally
+ if cfun is not NULL.
+
PR c++/26917
* repo.c (repo_file): Remove.
(open_repo_file, reopen_repo_file_for_write): Return fopened
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index ad493aa..f97ab06 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -605,7 +605,8 @@ build_throw (tree exp)
if (processing_template_decl)
{
- current_function_returns_abnormally = 1;
+ if (cfun)
+ current_function_returns_abnormally = 1;
return build_min (THROW_EXPR, void_type_node, exp);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e4210b8..a8c9b62 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/28878
+ * g++.dg/parse/crash33.C: New test.
+
2006-09-01 J"orn Rennecke <joern.rennecke@st.com>
Richard Guenther <rguenther@suse.de>
Adam Nemet <anemet@caviumnetworks.com>
diff --git a/gcc/testsuite/g++.dg/parse/crash33.C b/gcc/testsuite/g++.dg/parse/crash33.C
new file mode 100644
index 0000000..2ab84df
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/crash33.C
@@ -0,0 +1,8 @@
+// PR c++/28878
+// { dg-do compile }
+
+template<int>
+void foo()
+[
+ throw; // { dg-error "expected" }
+} // { dg-error "expected" }