// RUN: %clang_cc1 -fopenmp -x c -triple i386-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm-bc %s -o %t-x86-host.bc // RUN: %clang_cc1 -verify -fopenmp -x c -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -fsyntax-only // RUN: %clang_cc1 -verify -DDIAGS -DIMMEDIATE -fopenmp -x c -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -fsyntax-only // RUN: %clang_cc1 -verify -DDIAGS -DDELAYED -fopenmp -x c -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -fsyntax-only // REQUIRES: x86-registered-target // REQUIRES: nvptx-registered-target #ifndef DIAGS // expected-no-diagnostics #endif // DIAGS void foo(int r, ...) { #ifdef IMMEDIATE // expected-error@+4 {{CUDA device code does not support va_arg}} #endif // IMMEDIATE __builtin_va_list list; __builtin_va_start(list, r); (void)__builtin_va_arg(list, int); __builtin_va_end(list); } #ifdef IMMEDIATE #pragma omp declare target to(foo) #endif //IMMEDIATE #ifdef IMMEDIATE #pragma omp declare target #endif //IMMEDIATE void t1(int r, ...) { #ifdef DIAGS // expected-error@+4 {{CUDA device code does not support va_arg}} #endif // DIAGS __builtin_va_list list; __builtin_va_start(list, r); (void)__builtin_va_arg(list, int); __builtin_va_end(list); } #ifdef IMMEDIATE #pragma omp end declare target #endif //IMMEDIATE int main() { #ifdef DELAYED #pragma omp target #endif // DELAYED { #ifdef DELAYED // expected-note@+2 {{called by 'main'}} #endif // DELAYED t1(0); } return 0; }