From: Eric Botcazou Date: Mon, 10 Feb 2003 12:45:54 +0000 (+0100) Subject: re PR c/7741 (ICE on conflicting types (make_decl_rtl at varasm.c:834)) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ecf92f822777f05e82a0cb8c93232abf24df8318;p=gcc.git 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 From-SVN: r62631 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1879ddcb1e..d0a9caedfa4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-02-10 Eric Botcazou + Christian Ehrhardt + + 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 * Makefile.in (sreal.o): Added. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index a5439316d2e..01a35874ecb 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 d9082807b76..fd9d5501d3a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-02-10 Eric Botcazou + Christian Ehrhardt + + * gcc.dg/decl-2.c: New test. + Mon Feb 10 11:41:20 CET 2003 Jan Hubicka * 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 00000000000..44fbc733027 --- /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" } */ +}