From patchwork Tue Aug 13 19:20:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Botcazou X-Patchwork-Id: 266908 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 3698F2C0165 for ; Wed, 14 Aug 2013 05:20:32 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:mime-version:message-id:content-type; q=dns; s= default; b=vWop0pLtdhu9zXyd9sjM0ggNFjZx+AUYgY0BdgxWMeK2YCoNgkKrS CuerUZpG5LPOatI5JVRpBcEPrHaMSVUOIVZx7CpJ0MDKdjge5upOTe+OxgJPRa0S PpEEO9A97NvXleuGsauWjxd+kz2ERZJUV8SrDMQ21a5m6p8HYpTQjA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:mime-version:message-id:content-type; s= default; bh=4AuJtKkLdf1efROukJgRsEUshis=; b=f8joeEMY3M3JZqIX/kHk anmlATkfZsg2Jqu0tgmA9pRlcvF/MrPDNJhb1sf/mO+QkIImmJEoPMG0YPkvPorl DM2vkwRGipRNwF2hxohXRjWqHhXzxvkufMig/X+EPMX6H4aaRtWPexjpAKBnvSZc kxhuvWSxgNtgRvtnhJHPxg4= Received: (qmail 8806 invoked by alias); 13 Aug 2013 19:20:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8790 invoked by uid 89); 13 Aug 2013 19:20:25 -0000 X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 Received: from mel.act-europe.fr (HELO smtp.eu.adacore.com) (194.98.77.210) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Tue, 13 Aug 2013 19:20:24 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id 8DDD8265B2B6 for ; Tue, 13 Aug 2013 21:20:22 +0200 (CEST) Received: from smtp.eu.adacore.com ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2iBPjTxcU-Yq for ; Tue, 13 Aug 2013 21:20:22 +0200 (CEST) Received: from hermes.site (ADijon-552-1-15-198.w92-138.abo.wanadoo.fr [92.138.150.198]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.eu.adacore.com (Postfix) with ESMTPSA id 6603B265B2B5 for ; Tue, 13 Aug 2013 21:20:22 +0200 (CEST) From: Eric Botcazou To: gcc-patches@gcc.gnu.org Subject: [Ada] Fix ICE on VMS valued procedure Date: Tue, 13 Aug 2013 21:20:55 +0200 User-Agent: KMail/1.13.5 (Linux/2.6.34.10-0.6-desktop; KDE/4.4.4; x86_64; ; ) MIME-Version: 1.0 Message-Id: <201308132120.55353.ebotcazou@adacore.com> X-Virus-Found: No This fixes an ICE on a call to a valued procedure that takes a converted integer as actual parameter passed by reference. Tested on x86_64-suse-linux, applied on the mainline. 2013-08-13 Eric Botcazou * gcc-interface/trans.c (Call_to_gnu): Deal with specific conditional expressions for misaligned actual parameters. 2013-08-13 Eric Botcazou * gnat.dg/valued_proc.adb: New test. * gnat.dg/valued_proc_pkg.ads: New helper. Index: gcc-interface/trans.c =================================================================== --- gcc-interface/trans.c (revision 201692) +++ gcc-interface/trans.c (working copy) @@ -4022,9 +4022,19 @@ Call_to_gnu (Node_Id gnat_node, tree *gn /* Set up to move the copy back to the original if needed. */ if (!in_param) { - gnu_stmt = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_orig, - gnu_temp); + /* If the original is a COND_EXPR whose first arm isn't meant to + be further used, just deal with the second arm. This is very + likely the conditional expression built for a check. */ + if (TREE_CODE (gnu_orig) == COND_EXPR + && TREE_CODE (TREE_OPERAND (gnu_orig, 1)) == COMPOUND_EXPR + && integer_zerop + (TREE_OPERAND (TREE_OPERAND (gnu_orig, 1), 1))) + gnu_orig = TREE_OPERAND (gnu_orig, 2); + + gnu_stmt + = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_orig, gnu_temp); set_expr_location_from_node (gnu_stmt, gnat_node); + append_to_statement_list (gnu_stmt, &gnu_after_list); } }