This is the mail archive of the 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]
Other format: [Raw text]

Re: [Ada] Move error checks for eliminated subprogram references to the front end

> Currently error checks for invalid references to eliminated subprograms
> in calls and attributes are performed in the back end, but this means
> duplicating these checks in the case of non-gcc back ends (AAMP,.NET,JVM).
> The checks are now moved to the front end, done at the point of call
> resolution and analysis of attributes. A new error checking routine is
> added that accounts for going up the alias chain and excludes flagging
> of references nested within generics and eliminated subprograms.

Follow-up patch for Gigi, tested on i586-suse-linux, applied on the mainline.

2009-04-20  Eric Botcazou  <>

	* gcc-interface/trans.c (check_for_eliminated_entity): Remove.
	(Attribute_to_gnu): Do not call check_for_eliminated_entity.
	(call_to_gnu): Likewise.

Eric Botcazou
Index: gcc-interface/trans.c
--- gcc-interface/trans.c	(revision 146398)
+++ gcc-interface/trans.c	(working copy)
@@ -1058,23 +1058,6 @@ Pragma_to_gnu (Node_Id gnat_node)
   return gnu_result;
-/* Issue an error message if GNAT_NODE references an eliminated entity.  */
-static void
-check_for_eliminated_entity (Node_Id gnat_node)
-  switch (Nkind (gnat_node))
-    {
-    case N_Identifier:
-    case N_Operator_Symbol:
-    case N_Expanded_Name:
-    case N_Attribute_Reference:
-      if (Is_Eliminated (Entity (gnat_node)))
-	Eliminate_Error_Msg (gnat_node, Entity (gnat_node));
-      break;
-    }
 /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Attribute,
    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer to
    where we should place the result type.  ATTRIBUTE is the attribute ID.  */
@@ -1215,8 +1198,6 @@ Attribute_to_gnu (Node_Id gnat_node, tre
 	 don't try to build a trampoline.  */
       if (attribute == Attr_Code_Address)
-	  check_for_eliminated_entity (Prefix (gnat_node));
 	  for (gnu_expr = gnu_result;
 	       CONVERT_EXPR_P (gnu_expr);
 	       gnu_expr = TREE_OPERAND (gnu_expr, 0))
@@ -1231,8 +1212,6 @@ Attribute_to_gnu (Node_Id gnat_node, tre
 	 a useful warning with -Wtrampolines.  */
       else if (TREE_CODE (TREE_TYPE (gnu_prefix)) == FUNCTION_TYPE)
-	  check_for_eliminated_entity (Prefix (gnat_node));
 	  for (gnu_expr = gnu_result;
 	       CONVERT_EXPR_P (gnu_expr);
 	       gnu_expr = TREE_OPERAND (gnu_expr, 0))
@@ -2357,8 +2336,6 @@ call_to_gnu (Node_Id gnat_node, tree *gn
   tree gnu_after_list = NULL_TREE;
   tree gnu_subprog_call;
-  check_for_eliminated_entity (Name (gnat_node));
   gcc_assert (TREE_CODE (gnu_subprog_type) == FUNCTION_TYPE);
   /* If we are calling a stubbed function, make this into a raise of

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