This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Lazy DECL_RTL breakage for weak alias
- To: gcc-patches at gcc dot gnu dot org
- Subject: Lazy DECL_RTL breakage for weak alias
- From: Jim Wilson <wilson at cygnus dot com>
- Date: Thu, 15 Mar 2001 22:52:04 -0800
The lazy DECL_RTL patch broke glibc builds on targets that use DWARF2.
This showed up as an ia64-linux glibc build failure.
A minimal testcase is:
extern __const char *__const _sys_siglist[64];
const char *const __new_sys_siglist[64];
extern __typeof (__new_sys_siglist) _sys_siglist __attribute__ ((weak, alias ("__new_sys_siglist")));
Compile this with -gdwarf-2 and we hit the abort at the start of make_decl_rtl.
The problem here is that attribute alias clears the DECL_EXTERNAL bit, so
we end up with a decl with none of DECL_EXTERNAL, DECL_REGISTER, or TREE_STATIC
set. However, it is still not an auto. I think the right fix is to add
another check for TREE_PUBLIC.
This patch has not been tested with a bootstrap yet, and has not been checked
in yet.
2001-03-15 Jim Wilson <wilson@redhat.com>
* varasm.c (make_decl_rtl): Add TREE_PUBLIC check to abort test.
Index: varasm.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/varasm.c,v
retrieving revision 1.166
diff -p -r1.166 varasm.c
*** varasm.c 2001/03/15 09:58:58 1.166
--- varasm.c 2001/03/16 06:43:11
*************** make_decl_rtl (decl, asmspec)
*** 592,597 ****
--- 592,598 ----
|| TREE_CODE (decl) == RESULT_DECL
|| (TREE_CODE (decl) == VAR_DECL
&& !TREE_STATIC (decl)
+ && !TREE_PUBLIC (decl)
&& !DECL_EXTERNAL (decl)
&& !DECL_REGISTER (decl)))
abort ();