aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-09-19 07:29:33 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-09-19 07:29:33 +0000
commit78c120b5675cd6619184d8909c4469fd44ec0135 (patch)
tree3cf9e45be25619caeb7d65106d53aa1746a2b569
parent8bc603eeeb0d63506821723c859a4186e868d7c4 (diff)
downloadgcc-78c120b5675cd6619184d8909c4469fd44ec0135.zip
gcc-78c120b5675cd6619184d8909c4469fd44ec0135.tar.gz
gcc-78c120b5675cd6619184d8909c4469fd44ec0135.tar.bz2
* decl.c (start_function): Robustify.
From-SVN: r36527
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c11
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/crash23.C7
3 files changed, 19 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 62fa62d..c29b295 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2000-09-18 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (start_function): Robustify.
+
2000-09-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cp-tree.h (check_function_format): Accept a `status' parameter.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 3b2a057..e016e33 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -13711,9 +13711,14 @@ start_function (declspecs, declarator, attrs, flags)
current_function_decl = decl1;
cfun->decl = decl1;
- my_friendly_assert ((DECL_PENDING_INLINE_P (decl1)
- || !DECL_SAVED_FUNCTION_DATA (decl1)),
- 20000911);
+ /* If we are (erroneously) defining a function that we have already
+ defined before, wipe out what we knew before. */
+ if (!DECL_PENDING_INLINE_P (decl1)
+ && DECL_SAVED_FUNCTION_DATA (decl1))
+ {
+ free (DECL_SAVED_FUNCTION_DATA (decl1));
+ DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
+ }
if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
{
diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash23.C b/gcc/testsuite/g++.old-deja/g++.other/crash23.C
new file mode 100644
index 0000000..afe0920
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/crash23.C
@@ -0,0 +1,7 @@
+// Build don't link:
+// Origin: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+class T;
+inline void operator<(T&, T&) { }
+inline void operator<(T&, T&) { }
+