From 46faa67da1d7e9450e8fa363f6633e2c68e33ff1 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sat, 11 Aug 2018 16:29:35 +0000 Subject: Vendor import of clang release_70 branch r339355: https://llvm.org/svn/llvm-project/cfe/branches/release_70@339355 --- test/CodeGen/global-blocks-win32.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/CodeGen/global-blocks-win32.c (limited to 'test/CodeGen/global-blocks-win32.c') diff --git a/test/CodeGen/global-blocks-win32.c b/test/CodeGen/global-blocks-win32.c new file mode 100644 index 000000000000..7a66c924b420 --- /dev/null +++ b/test/CodeGen/global-blocks-win32.c @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -fblocks -triple i386-pc-windows-msvc %s -emit-llvm -o - -fblocks | FileCheck %s + + +int (^x)(void) = ^() { return 21; }; + + +// Check that the block literal is emitted with a null isa pointer +// CHECK: @__block_literal_global = internal global { i8**, i32, i32, i8*, %struct.__block_descriptor* } { i8** null, + +// Check that _NSConcreteGlobalBlock has the correct dllimport specifier. +// CHECK: @_NSConcreteGlobalBlock = external dllimport global i8* +// Check that we create an initialiser pointer in the correct section (early library initialisation). +// CHECK: @.block_isa_init_ptr = internal constant void ()* @.block_isa_init, section ".CRT$XCLa" + +// Check that we emit an initialiser for it. +// CHECK: define internal void @.block_isa_init() { +// CHECK: store i8** @_NSConcreteGlobalBlock, i8*** getelementptr inbounds ({ i8**, i32, i32, i8*, %struct.__block_descriptor* }, { i8**, i32, i32, i8*, %struct.__block_descriptor* }* @__block_literal_global, i32 0, i32 0), align 4 + -- cgit v1.2.3