aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2003-02-10 13:45:54 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2003-02-10 12:45:54 +0000
commitecf92f822777f05e82a0cb8c93232abf24df8318 (patch)
tree8a1d28c03b69fb9ba8205eed11d31cdecbf9221d /gcc
parentac5e69da5659335b8f8d942b29bd01dc7384b6ad (diff)
downloadgcc-ecf92f822777f05e82a0cb8c93232abf24df8318.zip
gcc-ecf92f822777f05e82a0cb8c93232abf24df8318.tar.gz
gcc-ecf92f822777f05e82a0cb8c93232abf24df8318.tar.bz2
re PR c/7741 (ICE on conflicting types (make_decl_rtl at varasm.c:834))
PR c/7741 * c-decl.c (duplicate_decls): Discard the initializer of the new decl when the types are conflicting. Co-Authored-By: Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> From-SVN: r62631
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-decl.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/decl-2.c10
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f1879dd..d0a9cae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-02-10 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ PR c/7741
+ * c-decl.c (duplicate_decls): Discard the initializer of the
+ new decl when the types are conflicting.
+
2003-02-10 Josef Zlomek <zlomekj@suse.cz>
* Makefile.in (sreal.o): Added.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index a543931..01a3587 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1140,6 +1140,12 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
}
}
error_with_decl (olddecl, "previous declaration of `%s'");
+
+ /* This is safer because the initializer might contain references
+ to variables that were declared between olddecl and newdecl. This
+ will make the initializer invalid for olddecl in case it gets
+ assigned to olddecl below. */
+ DECL_INITIAL (newdecl) = 0;
}
/* TLS cannot follow non-TLS declaration. */
else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d908280..fd9d550 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-02-10 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ * gcc.dg/decl-2.c: New test.
+
Mon Feb 10 11:41:20 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-fpcvt-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/decl-2.c b/gcc/testsuite/gcc.dg/decl-2.c
new file mode 100644
index 0000000..44fbc73
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/decl-2.c
@@ -0,0 +1,10 @@
+/* PR c/7411 */
+/* Contributed by Christian Ehrhardt */
+/* { dg-do compile } */
+
+void foo(void)
+{
+ char c; /* { dg-error "previous declaration" } */
+ int i;
+ int c = i; /* { dg-error "conflicting types" } */
+}