/* Test valid use of the OpenACC 'declare' directive. */ int v0; #pragma acc declare create(v0) int v1; #pragma acc declare copyin(v1) int *v2; #pragma acc declare deviceptr(v2) int v3; #pragma acc declare device_resident(v3) int v4; #pragma acc declare link(v4) int v5, v6, v7, v8; #pragma acc declare create(v5, v6) copyin(v7, v8) int v9; #pragma acc declare present_or_copyin(v9) int v10; #pragma acc declare present_or_create(v10) void f (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) 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) 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'. */ 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) #if 0 /* TODO PR90868 "error: variable '[...]' used more than once with '#pragma acc declare'". */ 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 f_data (void) { #pragma acc data { 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) #if 0 /* TODO PR90868 "error: variable '[...]' used more than once with '#pragma acc declare'". */ 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:; } }