Commit 5c9c7e19 by Thomas Schwinge Committed by Thomas Schwinge

[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.

From-SVN: r272445
parent 3a37d6f6
2019-06-18 Thomas Schwinge <thomas@codesourcery.com>
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.
......
......@@ -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)
......
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment