1*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple x86_64-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - -fsanitize-address-use-after-scope | FileCheck %s
2*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple aarch64-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - -fsanitize-address-use-after-scope | FileCheck %s
3*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple ppc64le-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - -fsanitize-address-use-after-scope | FileCheck %s
4000875c1Salokmishra.besu // expected-no-diagnostics
5000875c1Salokmishra.besu
6000875c1Salokmishra.besu #ifndef HEADER
7000875c1Salokmishra.besu #define HEADER
8000875c1Salokmishra.besu
9000875c1Salokmishra.besu void bar();
10000875c1Salokmishra.besu
foo()11000875c1Salokmishra.besu void foo() {
12000875c1Salokmishra.besu #pragma omp metadirective when(implementation = {vendor(score(0) \
13000875c1Salokmishra.besu : llvm)}, \
14000875c1Salokmishra.besu device = {kind(cpu)} \
15000875c1Salokmishra.besu : parallel) default(target teams)
16000875c1Salokmishra.besu bar();
17000875c1Salokmishra.besu #pragma omp metadirective when(device = {kind(gpu)} \
18000875c1Salokmishra.besu : target teams) when(implementation = {vendor(llvm)} \
19000875c1Salokmishra.besu : parallel) default()
20000875c1Salokmishra.besu bar();
21000875c1Salokmishra.besu #pragma omp metadirective default(target) when(implementation = {vendor(score(5) \
22000875c1Salokmishra.besu : llvm)}, \
23000875c1Salokmishra.besu device = {kind(cpu, host)} \
24000875c1Salokmishra.besu : parallel)
25000875c1Salokmishra.besu bar();
26000875c1Salokmishra.besu #pragma omp metadirective when(implementation = {extension(match_all)} \
27000875c1Salokmishra.besu : parallel) default(parallel for)
28000875c1Salokmishra.besu for (int i = 0; i < 100; i++)
29000875c1Salokmishra.besu ;
30000875c1Salokmishra.besu #pragma omp metadirective when(implementation = {extension(match_any)} \
31000875c1Salokmishra.besu : parallel) default(parallel for)
32000875c1Salokmishra.besu for (int i = 0; i < 100; i++)
33000875c1Salokmishra.besu ;
34000875c1Salokmishra.besu #pragma omp metadirective when(implementation = {extension(match_none)} \
35000875c1Salokmishra.besu : parallel) default(parallel for)
36000875c1Salokmishra.besu for (int i = 0; i < 100; i++)
37000875c1Salokmishra.besu ;
38000875c1Salokmishra.besu }
39000875c1Salokmishra.besu
40000875c1Salokmishra.besu // CHECK-LABEL: void @_Z3foov()
41ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_2:@.+]] to void
42ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_3:@.+]] to void
43ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_4:@.+]] to void
44ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_5:@.+]] to void
45ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_6:@.+]] to void
46ac90dfc4SGiorgis Georgakoudis // CHECK: @__kmpc_fork_call(%struct.ident_t* {{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED_7:@.+]] to void
47000875c1Salokmishra.besu // CHECK: ret void
48000875c1Salokmishra.besu
49000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_2]](
50000875c1Salokmishra.besu // CHECK: @_Z3barv
51000875c1Salokmishra.besu // CHECK: ret void
52000875c1Salokmishra.besu
53000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_3]](
54000875c1Salokmishra.besu // CHECK: @_Z3barv
55000875c1Salokmishra.besu // CHECK: ret void
56000875c1Salokmishra.besu
57000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_4]](
58000875c1Salokmishra.besu // CHECK: @_Z3barv
59000875c1Salokmishra.besu // CHECK: ret void
60000875c1Salokmishra.besu
61000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_5]](
62000875c1Salokmishra.besu // NO-CHECK: call void @__kmpc_for_static_init
63000875c1Salokmishra.besu // NO-CHECK: call void @__kmpc_for_static_fini
64000875c1Salokmishra.besu // CHECK: ret void
65000875c1Salokmishra.besu
66000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_6]](
67000875c1Salokmishra.besu // CHECK: call void @__kmpc_for_static_init
68000875c1Salokmishra.besu // CHECK: call void @__kmpc_for_static_fini
69000875c1Salokmishra.besu // CHECK: ret void
70000875c1Salokmishra.besu
71000875c1Salokmishra.besu // CHECK: define internal void [[OUTLINED_7]](
72000875c1Salokmishra.besu // NO-CHECK: call void @__kmpc_for_static_init
73000875c1Salokmishra.besu // NO-CHECK: call void @__kmpc_for_static_fini
74000875c1Salokmishra.besu // CHECK: ret void
75000875c1Salokmishra.besu
76000875c1Salokmishra.besu #endif
77