This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Lazy DECL_RTL breakage for weak alias


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 ();


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]