aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-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 5f37ddecd4b..4709c147aeb 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 ad493aa389c..f97ab063dde 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 e4210b84567..a8c9b6200a6 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 00000000000..2ab84df46d3
--- /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" }