Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!arkesden.eng.sun.com!tiemann From: tiemann@arkesden.eng.sun.com (Michael Tiemann) Newsgroups: gnu.g++.bug Subject: g++-1.36.1, sun4os4, unrecognizable insn Message-ID: <8911280141.AA00601@arkesden.sun.com> Date: 28 Nov 89 01:41:37 GMT Sender: daemon@tut.cis.ohio-state.edu Reply-To: tiemann@sun.com Distribution: gnu Organization: GNUs Not Usenet Lines: 35 Here was the problem: Mon Nov 27 06:30:53 1989 Michael Tiemann (tiemann at arkesden) * expr.c (save_noncopied_parts): Deal with case of having `assign_stack_local' return an invalid memory reference. Here is the fix. GCC'ers, your line numbers will vary. These line numbers are against test release 1.36.2 from this morning. arkesden% diff -c2 expr.c~ expr.c *** expr.c~ Sat Oct 14 16:06:47 1989 --- expr.c Mon Nov 27 17:37:43 1989 *************** *** 2124,2129 **** tree part_type = TREE_TYPE (part); tree to_be_saved = build (COMPONENT_REF, part_type, lhs, part, 0); parts = tree_cons (to_be_saved, ! build (RTL_EXPR, part_type, 0, (tree) assign_stack_local (TYPE_MODE (part_type), int_size_in_bytes (part_type))), parts); store_expr (TREE_PURPOSE (parts), RTL_EXPR_RTL (TREE_VALUE (parts)), 0); --- 2124,2133 ---- tree part_type = TREE_TYPE (part); tree to_be_saved = build (COMPONENT_REF, part_type, lhs, part, 0); + rtx target = assign_stack_local (TYPE_MODE (part_type), + int_size_in_bytes (part_type)); + if (! memory_address_p (TYPE_MODE (part_type), XEXP (target, 0))) + target = change_address (target, TYPE_MODE (part_type), 0); parts = tree_cons (to_be_saved, ! build (RTL_EXPR, part_type, 0, (tree) target), parts); store_expr (TREE_PURPOSE (parts), RTL_EXPR_RTL (TREE_VALUE (parts)), 0); arkesden% Michael