From patchwork Mon Aug 2 13:40:28 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Ada] Don't generate RTL in gigi Date: Mon, 02 Aug 2010 03:40:28 -0000 From: Eric Botcazou X-Patchwork-Id: 60535 Message-Id: <201008021540.28908.ebotcazou@adacore.com> To: gcc-patches@gcc.gnu.org Cc: Steven Bosscher This eliminates the (presumably) last bits of RTL generation in gigi. Tested on x86-64-suse-linux. Steven, let me know if I've forgotten something. 2010-08-02 Eric Botcazou * gcc-interface/decl.c: Do not undefine N_GCC_FRONTEND and do not include expr.h. (gnat_to_gnu_entity) : Force address of -1 at the tree level for the debug-only entity. * gcc-interface/Make-lang.in (ada/decl.o): Adjust dependencies. Index: gcc-interface/decl.c =================================================================== --- gcc-interface/decl.c (revision 162622) +++ gcc-interface/decl.c (working copy) @@ -23,10 +23,6 @@ * * ****************************************************************************/ -/* FIXME: Still need to include rtl.h here (via expr.h) because this file - actually generates RTL (search for gen_rtx_* in gnat_to_gnu_entity). */ -#undef IN_GCC_FRONTEND - #include "config.h" #include "system.h" #include "coretypes.h" @@ -36,7 +32,6 @@ #include "toplev.h" #include "ggc.h" #include "target.h" -#include "expr.h" #include "tree-inline.h" #include "ada.h" @@ -600,18 +595,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entit && DECL_NAME (TYPE_NAME (gnu_type)) == exception_data_name_id) gnu_type = except_type_node; - /* For a debug renaming declaration, build a pure debug entity. */ + /* For a debug renaming declaration, build a debug-only entity. */ if (Present (Debug_Renaming_Link (gnat_entity))) { - rtx addr; + /* Force a non-null value to make sure the symbol is retained. */ + tree value = build1 (INDIRECT_REF, gnu_type, + build1 (NOP_EXPR, + build_pointer_type (gnu_type), + integer_minus_one_node)); gnu_decl = build_decl (input_location, VAR_DECL, gnu_entity_name, gnu_type); - /* The (MEM (CONST (0))) pattern is prescribed by STABS. */ - if (global_bindings_p ()) - addr = gen_rtx_CONST (VOIDmode, const0_rtx); - else - addr = stack_pointer_rtx; - SET_DECL_RTL (gnu_decl, gen_rtx_MEM (Pmode, addr)); + SET_DECL_VALUE_EXPR (gnu_decl, value); + DECL_HAS_VALUE_EXPR_P (gnu_decl) = 1; gnat_pushdecl (gnu_decl, gnat_entity); break; } Index: gcc-interface/Make-lang.in =================================================================== --- gcc-interface/Make-lang.in (revision 162622) +++ gcc-interface/Make-lang.in (working copy) @@ -1235,8 +1235,8 @@ ada/cuintp.o : ada/gcc-interface/cuintp. $(COMPILER) -c $(ALL_COMPILERFLAGS) -I.. $(ALL_CPPFLAGS) $< -o $@ ada/decl.o : ada/gcc-interface/decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - $(TM_H) $(TREE_H) $(FLAGS_H) toplev.h $(TARGET_H) $(EXPR_H) \ - $(TREE_INLINE_H) ada/gcc-interface/ada.h ada/types.h ada/atree.h \ + $(TM_H) $(TREE_H) $(FLAGS_H) toplev.h $(TARGET_H) $(TREE_INLINE_H) \ + ada/gcc-interface/ada.h ada/types.h ada/atree.h \ ada/elists.h ada/namet.h ada/nlists.h ada/repinfo.h ada/snames.h \ ada/stringt.h ada/uintp.h ada/fe.h ada/sinfo.h ada/einfo.h $(ADA_TREE_H) \ ada/gcc-interface/gigi.h gt-ada-decl.h