From patchwork Fri Jan 17 20:02:17 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Jelinek X-Patchwork-Id: 312199 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.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 9ACBF2C0091 for ; Sat, 18 Jan 2014 07:02:30 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:reply-to:mime-version :content-type; q=dns; s=default; b=C8XIaXaC3pMcMEZaGtM3pePjOw3aT POttTQhCaPLs6S0EwB+jrZhTsAWpBo0fT1n7w6RD7sWG4Se5OH29YyFe2F6S8dDJ YbJ8TYQi3FnbNpxLalski6JzYGkeEZeF9WzyUIDAvFDhvYKdYRcj9h/Mx7wt00Fx HcRMxWYG+Qquek= 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:date :from:to:cc:subject:message-id:reply-to:mime-version :content-type; s=default; bh=7XUdt3NSpq4SdXkmbQXZUxSvst8=; b=alh 5MXF6LoDSBIyXo67iHoFcExz89kI+ge9vg4qmSmsESEerKhv9XP1W+smlxnDnr7y ExpP6zvVTXQUVuKfhSZ3l9u5u+lzSYCbyEmTjyPMrjdkUIsGFZx/Fy2jtakxMVjf xmtYup0TDxi6iBP9isYWFa484q38MOSdDim2IINU= Received: (qmail 16719 invoked by alias); 17 Jan 2014 20:02:24 -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 16710 invoked by uid 89); 17 Jan 2014 20:02:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.8 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 17 Jan 2014 20:02:23 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s0HK2Lch017926 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 Jan 2014 15:02:21 -0500 Received: from tucnak.zalov.cz (vpn1-7-114.ams2.redhat.com [10.36.7.114]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s0HK2Jes014654 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 17 Jan 2014 15:02:20 -0500 Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.14.7/8.14.7) with ESMTP id s0HK2IiE001756; Fri, 17 Jan 2014 21:02:18 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.14.7/8.14.7/Submit) id s0HK2HtW001754; Fri, 17 Jan 2014 21:02:17 +0100 Date: Fri, 17 Jan 2014 21:02:17 +0100 From: Jakub Jelinek To: Richard Biener , Tobias Burnus Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] FIx up ANNOTATE_EXPR gimplification (PR middle-end/59706) Message-ID: <20140117200217.GN892@tucnak.redhat.com> Reply-To: Jakub Jelinek MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Hi! When gimplifying ANNOTATE_EXPR, gimplify_expr used create_tmp_var_raw, which unfortunately (among tons of other desirable things) doesn't set DECL_CONTEXT on the temporary var and tree-nested.c then ICEs on it because of that. The following patch fixes that. Unfortunately, on the second (invalid) testcase this started to ICE during error recovery, so the patch emits the IFN_ANNOTATE internal call only if the cond doesn't have obviously bogus type. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2014-01-17 Jakub Jelinek PR middle-end/59706 * gimplify.c (gimplify_expr): Use create_tmp_var instead of create_tmp_var_raw. If cond doesn't have integral type, don't add the IFN_ANNOTATE builtin at all. * gfortran.dg/pr59706.f90: New test. * g++.dg/ext/pr59706.C: New test. Jakub --- gcc/gimplify.c.jj 2014-01-08 10:23:24.000000000 +0100 +++ gcc/gimplify.c 2014-01-17 16:51:12.324526084 +0100 @@ -7491,7 +7491,14 @@ gimplify_expr (tree *expr_p, gimple_seq { tree cond = TREE_OPERAND (*expr_p, 0); tree id = TREE_OPERAND (*expr_p, 1); - tree tmp = create_tmp_var_raw (TREE_TYPE(cond), NULL); + tree type = TREE_TYPE (cond); + if (!INTEGRAL_TYPE_P (type)) + { + *expr_p = cond; + ret = GS_OK; + break; + } + tree tmp = create_tmp_var (type, NULL); gimplify_arg (&cond, pre_p, EXPR_LOCATION (*expr_p)); gimple call = gimple_build_call_internal (IFN_ANNOTATE, 2, cond, id); --- gcc/testsuite/gfortran.dg/pr59706.f90.jj 2014-01-17 17:19:23.665900803 +0100 +++ gcc/testsuite/gfortran.dg/pr59706.f90 2014-01-17 17:17:48.000000000 +0100 @@ -0,0 +1,10 @@ +! PR middle-end/59706 +! { dg-do compile } + + integer i + do concurrent (i=1:2) + end do +contains + subroutine foo + end +end --- gcc/testsuite/g++.dg/ext/pr59706.C.jj 2014-01-17 17:23:46.999556115 +0100 +++ gcc/testsuite/g++.dg/ext/pr59706.C 2014-01-17 17:20:53.000000000 +0100 @@ -0,0 +1,21 @@ +// PR middle-end/59706 +// { dg-do compile } + +extern struct S s; +struct T { T (); ~T (); int t; } t; + +void +foo () +{ + #pragma GCC ivdep + while (s) // { dg-error "could not convert" } + ; +} + +void +bar () +{ + #pragma GCC ivdep + while (t) // { dg-error "could not convert" } + ; +}