Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/c-c++-common/goacc/declare-2.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/testsuite/c-c++-common/goacc/declare-2.c Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/testsuite/c-c++-common/goacc/declare-2.c Thu Feb 13 11:34:05 2020 +0900 @@ -1,5 +1,5 @@ -/* Test invalid uses of declare directive. */ -/* { dg-do compile } */ +/* Test invalid use of the OpenACC 'declare' directive. */ + #pragma acc declare /* { dg-error "no valid clauses" } */ @@ -42,6 +42,7 @@ int va12; #pragma acc declare create (va12) link (va12) /* { dg-error "more than once" } */ + void f (void) { @@ -65,3 +66,132 @@ #pragma acc declare present (v2) /* { dg-error "invalid use of" } */ } + + +/* The same as 'f' but everything contained in an OpenACC 'data' construct. */ + +void +f_data (void) +{ +#pragma acc data + { + int va0; +# pragma acc declare link(va0) /* { dg-error "global variable" } */ + + extern int ve0; +# pragma acc declare copy(ve0) /* { dg-error "invalid use of" } */ + + extern int ve1; +# pragma acc declare copyout(ve1) /* { dg-error "invalid use of" } */ + + extern int ve2; +# pragma acc declare present(ve2) /* { dg-error "invalid use of" } */ + + extern int ve3; +# pragma acc declare present_or_copy(ve3) /* { dg-error "invalid use of" } */ + + extern int ve4; +# pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */ + +# 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