From patchwork Tue Jun 18 22:25:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 1118369 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-503220-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="simFsvHD"; dkim-atps=neutral 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 45T2jc3pvsz9s4V for ; Wed, 19 Jun 2019 08:26:12 +1000 (AEST) 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:message-id:mime-version:content-type; q=dns; s= default; b=wskheU0x4nkyYNUrvXbfThfnD4875k3k5/ksSj7c1y89scg4LesD2 RzFX91fUWidiCA2kaLbj+uk5RRlFmkpM1wi0+JwW1cl3RrglZpm+Mu+yc1eDhzWC ylXKWoV1AaqqKHo+uLCXZGI5rWQgRQ82orL/d8qqWTd7GoSJGQQN50= 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:message-id:mime-version:content-type; s= default; bh=GbAcNNLWsbMgNB6AJ9JnTzpnROA=; b=simFsvHDcBXPcnuva6RE lXs9biTwsKmqN1hrGtM6VhwwHySDa6z7/3NkXMFWcpzufmt0c5tg4MnQQxDFkR+P eDAKw5/MnCv5AhAvWpryE7zjEWbH25ECcW63R2PP+85+L/G4MKSzM3ZMB6RCTshW RF0v12h34/mUMceZxxIBplI= Received: (qmail 116039 invoked by alias); 18 Jun 2019 22:26:05 -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 116031 invoked by uid 89); 18 Jun 2019 22:26:05 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=r272445 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Jun 2019 22:26:03 +0000 Received: from svr-orw-mbx-05.mgc.mentorg.com ([147.34.90.205]) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1hdMYE-0002ZL-7M from Thomas_Schwinge@mentor.com for gcc-patches@gcc.gnu.org; Tue, 18 Jun 2019 15:26:02 -0700 Received: from svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) by SVR-ORW-MBX-05.mgc.mentorg.com (147.34.90.205) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Tue, 18 Jun 2019 15:25:59 -0700 Received: from tftp-cs (147.34.91.1) by svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) with Microsoft SMTP Server id 15.0.1320.4 via Frontend Transport; Tue, 18 Jun 2019 15:25:59 -0700 Received: by tftp-cs (Postfix, from userid 49978) id 53E9DC2212; Tue, 18 Jun 2019 15:25:59 -0700 (PDT) From: Thomas Schwinge To: Subject: [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables User-Agent: Notmuch/0.9-125-g4686d11 (http://notmuchmail.org) Emacs/26.1 (x86_64-pc-linux-gnu) Date: Wed, 19 Jun 2019 00:25:49 +0200 Message-ID: <874l4mh6oi.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Hi! This doesn't resolve PR90868, but at least in trunk r272445 we now "Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables", see attached. Grüße Thomas From 267951437cde77a09e62d9c151002eeed3cf457c Mon Sep 17 00:00:00 2001 From: tschwinge Date: Tue, 18 Jun 2019 22:14:04 +0000 Subject: [PATCH] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables gcc/testsuite/ PR testsuite/90868 * c-c++-common/goacc/declare-1.c: Update. * c-c++-common/goacc/declare-2.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272445 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 4 + gcc/testsuite/c-c++-common/goacc/declare-1.c | 85 ++++++++++++++++- gcc/testsuite/c-c++-common/goacc/declare-2.c | 99 ++++++++++++++++++++ 3 files changed, 187 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 473fd66d39fd..981055838ab6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2019-06-18 Thomas Schwinge + PR testsuite/90868 + * c-c++-common/goacc/declare-1.c: Update. + * c-c++-common/goacc/declare-2.c: Likewise. + PR middle-end/90862 * c-c++-common/goacc/declare-1.c: Update. * c-c++-common/goacc/declare-2.c: Likewise. diff --git a/gcc/testsuite/c-c++-common/goacc/declare-1.c b/gcc/testsuite/c-c++-common/goacc/declare-1.c index 7c4380f4f041..46ee01b67595 100644 --- a/gcc/testsuite/c-c++-common/goacc/declare-1.c +++ b/gcc/testsuite/c-c++-common/goacc/declare-1.c @@ -96,6 +96,84 @@ f (void) } +/* The same as 'f'. */ + +void +f_2 (void) +{ + int va0; +#pragma acc declare create(va0) + + int va1; +#pragma acc declare copyin(va1) + + int *va2; +#pragma acc declare deviceptr(va2) + + int va3; +#pragma acc declare device_resident(va3) + +#ifndef __cplusplus + /* TODO PR90868 + + C: "error: variable '[...]' used more than once with '#pragma acc declare'". */ +#else + extern int ve0; +#pragma acc declare create(ve0) + + extern int ve1; +#pragma acc declare copyin(ve1) + + extern int *ve2; +#pragma acc declare deviceptr(ve2) + + extern int ve3; +#pragma acc declare device_resident(ve3) + + extern int ve4; +#pragma acc declare link(ve4) + + extern int ve5; +#pragma acc declare present_or_copyin(ve5) + + extern int ve6; +#pragma acc declare present_or_create(ve6) +#endif + + int va5; +#pragma acc declare copy(va5) + + int va6; +#pragma acc declare copyout(va6) + + int va7; +#pragma acc declare present(va7) + + int va8; +#pragma acc declare present_or_copy(va8) + + int va9; +#pragma acc declare present_or_copyin(va9) + + int va10; +#pragma acc declare present_or_copyout(va10) + + int va11; +#pragma acc declare present_or_create(va11) + + a: + { + int va0; +#pragma acc declare create(va0) + if (v1) + goto a; + else + goto b; + } + b:; +} + + /* The same as 'f' but everything contained in an OpenACC 'data' construct. */ void @@ -115,7 +193,12 @@ f_data (void) int va3; # pragma acc declare device_resident(va3) -#if 0 /* TODO */ +#if 0 + /* TODO PR90868 + + C: "error: variable '[...]' used more than once with '#pragma acc declare'". + C++: ICE during gimplification. */ + extern int ve0; # pragma acc declare create(ve0) diff --git a/gcc/testsuite/c-c++-common/goacc/declare-2.c b/gcc/testsuite/c-c++-common/goacc/declare-2.c index af43b6bc8162..e2e22be57e9e 100644 --- a/gcc/testsuite/c-c++-common/goacc/declare-2.c +++ b/gcc/testsuite/c-c++-common/goacc/declare-2.c @@ -96,3 +96,102 @@ f_data (void) # pragma acc declare present (v2) /* { dg-error "invalid use of" } */ } } + + +/* Testing for PR90868 "Duplicate OpenACC 'declare' directives for 'extern' + variables". */ + + +void +f_pr90868 (void) +{ + extern int we0; +#pragma acc declare create(we0) + + extern int we1; +#pragma acc declare copyin(we1) + + extern int *we2; +#pragma acc declare deviceptr(we2) + + extern int we3; +#pragma acc declare device_resident(we3) + + extern int we4; +#pragma acc declare link(we4) + + extern int we5; +#pragma acc declare present_or_copyin(we5) + + extern int we6; +#pragma acc declare present_or_create(we6) +} + + +/* The same as 'f_pr90868'. */ + +/* The errors are emitted for C only; for C++, the duplicate OpenACC 'declare' + directives for 'extern' variables are accepted. */ + +void +f_pr90868_2 (void) +{ + extern int we0; +#pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we1; +#pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int *we2; +#pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we3; +#pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we4; +#pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we5; +#pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we6; +#pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */ +} + + +/* The same as 'f_pr90868' but everything contained in an OpenACC 'data' + construct. */ + +#ifdef __cplusplus +/* TODO PR90868 + + C++: ICE during gimplification. */ +#else +void +f_pr90868_data (void) +{ +#pragma acc data + { + extern int we0; +# pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we1; +# pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int *we2; +# pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we3; +# pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we4; +# pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we5; +# pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */ + + extern int we6; +# pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */ + } +} +#endif -- 2.20.1