blob: 675c8dda27dee3859a266d471c5ef23826916a40 [file] [log] [blame]
David Majnemerc403a1c2015-03-20 17:03:35 +00001// RUN: %clang_cc1 -fms-extensions -DDECLARE_SETJMP -triple i686-windows-msvc -emit-llvm %s -o - | FileCheck --check-prefix=I386 %s
2// RUN: %clang_cc1 -fms-extensions -DDECLARE_SETJMP -triple x86_64-windows-msvc -emit-llvm %s -o - | FileCheck --check-prefix=X64 %s
David Majnemer310e3a82015-01-29 09:29:21 +00003// RUN: %clang_cc1 -fms-extensions -triple i686-windows-msvc -emit-llvm %s -o - | FileCheck --check-prefix=I386 %s
4// RUN: %clang_cc1 -fms-extensions -triple x86_64-windows-msvc -emit-llvm %s -o - | FileCheck --check-prefix=X64 %s
David Majnemer310e3a82015-01-29 09:29:21 +00005typedef char jmp_buf[1];
6
David Majnemerc403a1c2015-03-20 17:03:35 +00007#ifdef DECLARE_SETJMP
David Majnemer310e3a82015-01-29 09:29:21 +00008int _setjmp(jmp_buf env);
9int _setjmpex(jmp_buf env);
David Majnemerc403a1c2015-03-20 17:03:35 +000010#endif
David Majnemer310e3a82015-01-29 09:29:21 +000011
12jmp_buf jb;
13
14int test_setjmp() {
15 return _setjmp(jb);
16 // I386-LABEL: define i32 @test_setjmp
David Blaikied6c88ec2015-04-16 23:25:00 +000017 // I386: %[[call:.*]] = call i32 (i8*, i32, ...) @_setjmp3(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i32 0)
David Majnemer310e3a82015-01-29 09:29:21 +000018 // I386-NEXT: ret i32 %[[call]]
19
20 // X64-LABEL: define i32 @test_setjmp
21 // X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0)
David Blaikiebdf40a62015-03-13 18:21:46 +000022 // X64: %[[call:.*]] = call i32 @_setjmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
David Majnemer310e3a82015-01-29 09:29:21 +000023 // X64-NEXT: ret i32 %[[call]]
24}
25
26int test_setjmpex() {
27 return _setjmpex(jb);
28 // X64-LABEL: define i32 @test_setjmpex
29 // X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0)
David Blaikiebdf40a62015-03-13 18:21:46 +000030 // X64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
David Majnemer310e3a82015-01-29 09:29:21 +000031 // X64-NEXT: ret i32 %[[call]]
32}