From 0e1b45897ec9ac5de93a578edfe55021eb64bf5c Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Thu, 2 Nov 2017 14:25:34 +0000 Subject: [OPENMP] Fix PR35156: Get correct thread id with windows exceptions. If the thread id is requested in windows mode within funclets, we may generate incorrect function call that could lead to broken codegen. llvm-svn: 317208 --- clang/test/OpenMP/openmp_win_codegen.cpp | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 clang/test/OpenMP/openmp_win_codegen.cpp (limited to 'clang/test/OpenMP/openmp_win_codegen.cpp') diff --git a/clang/test/OpenMP/openmp_win_codegen.cpp b/clang/test/OpenMP/openmp_win_codegen.cpp new file mode 100644 index 00000000000..cdad7e29ccb --- /dev/null +++ b/clang/test/OpenMP/openmp_win_codegen.cpp @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-pc-windows-msvc18.0.0 -std=c++11 -fms-compatibility-version=18 -fms-extensions -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s +// REQUIRES: x86-registered-target +// expected-no-diagnostics + +void foo(); +void bar(); + +// CHECK-LABEL: @main +int main() { + // CHECK: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* @0, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[OUTLINED:@.+]] to void (i32*, i32*, ...)*)) +#pragma omp parallel + { + try { + foo(); + } catch (int t) { +#pragma omp critical + { + bar(); + }; + } + }; + // CHECK: ret i32 0 + return 0; +} + +// CHECK: define internal void [[OUTLINED]]( +// CHECK: [[GID:%.+]] = call i32 @__kmpc_global_thread_num(%ident_t* @0) +// CHECK: invoke void @{{.+}}foo +// CHECK: catchswitch within +// CHECK: catchpad within +// CHECK: call void @__kmpc_critical(%ident_t* @0, i32 [[GID]], +// CHECK: invoke void @{{.+}}bar +// CHECK: call void @__kmpc_end_critical(%ident_t* @0, i32 [[GID]], +// CHECK: catchret from +// CHECK: cleanuppad within +// CHECK: call void @__kmpc_end_critical(%ident_t* @0, i32 [[GID]], +// CHECK: cleanupret from + -- cgit v1.2.3