78 lines · c
1// RUN: %clang_cc1 %s -fopenacc -verify2 3short getS();4 5void Test() {6#pragma acc parallel vector_length(1)7 while(1);8#pragma acc kernels vector_length(1)9 while(1);10 11 // expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'kernels' directive}}12 // expected-note@+1{{previous 'vector_length' clause is here}}13#pragma acc kernels vector_length(1) vector_length(2)14 while(1);15 16 // expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'parallel' directive}}17 // expected-note@+1{{previous 'vector_length' clause is here}}18#pragma acc parallel vector_length(1) vector_length(2)19 while(1);20 21 // expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'kernels' directive}}22 // expected-note@+2{{previous 'vector_length' clause is here}}23 // expected-note@+1{{active 'device_type' clause here}}24#pragma acc kernels vector_length(1) device_type(*) vector_length(1) vector_length(2)25 while(1);26 27 // expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}28 // expected-note@+2{{previous 'vector_length' clause is here}}29 // expected-note@+1{{active 'device_type' clause here}}30#pragma acc parallel device_type(*) vector_length(1) vector_length(2)31 while(1);32 33#pragma acc parallel vector_length(1) device_type(*) vector_length(2)34 while(1);35 36 // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'serial' directive}}37#pragma acc serial vector_length(1)38 while(1);39 40 struct NotConvertible{} NC;41 // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('struct NotConvertible' invalid)}}42#pragma acc parallel vector_length(NC)43 while(1);44 45#pragma acc kernels vector_length(getS())46 while(1);47 48 struct Incomplete *SomeIncomplete;49 50 // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('struct Incomplete' invalid)}}51#pragma acc kernels vector_length(*SomeIncomplete)52 while(1);53 54 enum E{A} SomeE;55 56#pragma acc kernels vector_length(SomeE)57 while(1);58 59 // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'loop' directive}}60#pragma acc loop vector_length(1)61 for(int i = 5; i < 10;++i);62}63 64void no_dupes_since_last_device_type() {65 // expected-error@+4{{OpenACC 'vector_length' clause applies to 'device_type' 'radeon', which conflicts with previous 'vector_length' clause}}66 // expected-note@+3{{active 'device_type' clause here}}67 // expected-note@+2{{previous 'vector_length' clause is here}}68 // expected-note@+1{{which applies to 'device_type' clause here}}69#pragma acc parallel device_type(nvidia, radeon) vector_length(getS()) device_type(radeon) vector_length(getS())70 ;71 // expected-error@+4{{OpenACC 'vector_length' clause applies to 'device_type' 'nvidia', which conflicts with previous 'vector_length' clause}}72 // expected-note@+3{{active 'device_type' clause here}}73 // expected-note@+2{{previous 'vector_length' clause is here}}74 // expected-note@+1{{which applies to 'device_type' clause here}}75#pragma acc parallel device_type(nvidia) vector_length(getS()) device_type(nvidia, radeon) vector_length(getS())76 ;77}78