1*876b5ea9SSaiyedul Islam // RUN: %clang_cc1 -verify -w -fopenmp -x c++ -triple x86_64-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - -fsanitize-address-use-after-scope | FileCheck %s
2*876b5ea9SSaiyedul Islam // expected-no-diagnostics
3*876b5ea9SSaiyedul Islam 
4*876b5ea9SSaiyedul Islam #ifndef HEADER
5*876b5ea9SSaiyedul Islam #define HEADER
6*876b5ea9SSaiyedul Islam 
7*876b5ea9SSaiyedul Islam void bar();
8*876b5ea9SSaiyedul Islam 
x86_64_device_isa_selected()9*876b5ea9SSaiyedul Islam void x86_64_device_isa_selected() {
10*876b5ea9SSaiyedul Islam #pragma omp metadirective when(device = {isa("sse2")} \
11*876b5ea9SSaiyedul Islam                                : parallel) default(single)
12*876b5ea9SSaiyedul Islam   bar();
13*876b5ea9SSaiyedul Islam }
14*876b5ea9SSaiyedul Islam // CHECK-LABEL: void @_Z26x86_64_device_isa_selectedv()
15*876b5ea9SSaiyedul Islam // CHECK: ...) @__kmpc_fork_call{{.*}}@.omp_outlined.
16*876b5ea9SSaiyedul Islam // CHECK: ret void
17*876b5ea9SSaiyedul Islam 
18*876b5ea9SSaiyedul Islam // CHECK: define internal void @.omp_outlined.(
19*876b5ea9SSaiyedul Islam // CHECK: @_Z3barv
20*876b5ea9SSaiyedul Islam // CHECK: ret void
21*876b5ea9SSaiyedul Islam 
x86_64_device_isa_not_selected()22*876b5ea9SSaiyedul Islam void x86_64_device_isa_not_selected() {
23*876b5ea9SSaiyedul Islam #pragma omp metadirective when(device = {isa("some-unsupported-feature")} \
24*876b5ea9SSaiyedul Islam                                : parallel) default(single)
25*876b5ea9SSaiyedul Islam   bar();
26*876b5ea9SSaiyedul Islam }
27*876b5ea9SSaiyedul Islam // CHECK-LABEL: void @_Z30x86_64_device_isa_not_selectedv()
28*876b5ea9SSaiyedul Islam // CHECK: call i32 @__kmpc_single
29*876b5ea9SSaiyedul Islam // CHECK:  @_Z3barv
30*876b5ea9SSaiyedul Islam // CHECK: call void @__kmpc_end_single
31*876b5ea9SSaiyedul Islam // CHECK: ret void
32*876b5ea9SSaiyedul Islam #endif
33