blob: 675c8dda27dee3859a266d471c5ef23826916a40 [file] [log] [blame]
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -07001// 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
Stephen Hines0e2c34f2015-03-23 12:09:02 -07003// 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
Stephen Hines0e2c34f2015-03-23 12:09:02 -07005typedef char jmp_buf[1];
6
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -07007#ifdef DECLARE_SETJMP
Stephen Hines0e2c34f2015-03-23 12:09:02 -07008int _setjmp(jmp_buf env);
9int _setjmpex(jmp_buf env);
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070010#endif
Stephen Hines0e2c34f2015-03-23 12:09:02 -070011
12jmp_buf jb;
13
14int test_setjmp() {
15 return _setjmp(jb);
16 // I386-LABEL: define i32 @test_setjmp
Pirama Arumuga Nainar33337ca2015-05-06 11:48:57 -070017 // I386: %[[call:.*]] = call i32 (i8*, i32, ...) @_setjmp3(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i32 0)
Stephen Hines0e2c34f2015-03-23 12:09:02 -070018 // I386-NEXT: ret i32 %[[call]]
19
20 // X64-LABEL: define i32 @test_setjmp
21 // X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0)
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070022 // X64: %[[call:.*]] = call i32 @_setjmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
Stephen Hines0e2c34f2015-03-23 12:09:02 -070023 // 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)
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070030 // X64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
Stephen Hines0e2c34f2015-03-23 12:09:02 -070031 // X64-NEXT: ret i32 %[[call]]
32}