------- Additional Comments From laurent at guerby dot net 2005-07-23 18:01 ------- FYI I successfully bootstraped on x86_64-linux with Andrew's patch: http://gcc.gnu.org/ml/gcc-testresults/2005-07/msg01241.html LAST_UPDATED: Sat Jul 23 10:44:53 UTC 2005
I'm updating and reboostraping. I also have a patch to ada/trans.c but I don't remember its origin (mailing list or bugzilla). Index: trans.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/ada/trans.c,v retrieving revision 1.101 diff -c -r1.101 trans.c *** trans.c 20 Jul 2005 01:18:53 -0000 1.101 --- trans.c 23 Jul 2005 17:58:13 -0000 *************** *** 3585,3590 **** --- 3585,3591 ---- else gnu_lhs = DECL_RESULT (current_function_decl); + #if 0 /* Do not remove the padding from GNU_RET_VAL if the inner type is self-referential since we want to allocate the fixed size in that case. */ *************** *** 3596,3601 **** --- 3597,3603 ---- && (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (gnu_ret_val))))) gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0); + #endif if (TYPE_RETURNS_BY_REF_P (gnu_subprog_type) || By_Ref (gnat_node)) *************** *** 4549,4576 **** *expr_p = TREE_OPERAND (*expr_p, 0); return GS_OK; - case ADDR_EXPR: - /* If we're taking the address of a constant CONSTRUCTOR, force it to - be put into static memory. We know it's going to be readonly given - the semantics we have and it's required to be static memory in - the case when the reference is in an elaboration procedure. */ - if (TREE_CODE (TREE_OPERAND (expr, 0)) == CONSTRUCTOR - && TREE_CONSTANT (TREE_OPERAND (expr, 0))) - { - tree new_var - = create_tmp_var (TREE_TYPE (TREE_OPERAND (expr, 0)), "C"); - - TREE_READONLY (new_var) = 1; - TREE_STATIC (new_var) = 1; - TREE_ADDRESSABLE (new_var) = 1; - DECL_INITIAL (new_var) = TREE_OPERAND (expr, 0); - - TREE_OPERAND (expr, 0) = new_var; - recompute_tree_invarant_for_addr_expr (expr); - return GS_ALL_DONE; - } - return GS_UNHANDLED; - case COMPONENT_REF: /* We have a kludge here. If the FIELD_DECL is from a fat pointer and is from an early dummy type, replace it with the proper FIELD_DECL. */ --- 4551,4556 ---- *************** *** 5361,5367 **** case UNCONSTRAINED_ARRAY_REF: case INDIRECT_REF: ! case CONSTRUCTOR: case NULL_EXPR: case SAVE_EXPR: return true; --- 5341,5347 ---- case UNCONSTRAINED_ARRAY_REF: case INDIRECT_REF: ! /* case CONSTRUCTOR:*/ case NULL_EXPR: case SAVE_EXPR: return true; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22631