mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 19:24:21 +00:00
Fixing the return type information for objc_sync_enter and objc_sync_exit. Patch thanks to Joe Ranieri!
llvm-svn: 163330
This commit is contained in:
parent
66c93f443d
commit
9c00446d2a
@ -433,19 +433,19 @@ public:
|
||||
|
||||
/// SyncEnterFn - LLVM object_sync_enter function.
|
||||
llvm::Constant *getSyncEnterFn() {
|
||||
// void objc_sync_enter (id)
|
||||
// int objc_sync_enter (id)
|
||||
llvm::Type *args[] = { ObjectPtrTy };
|
||||
llvm::FunctionType *FTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, args, false);
|
||||
llvm::FunctionType::get(CGM.IntTy, args, false);
|
||||
return CGM.CreateRuntimeFunction(FTy, "objc_sync_enter");
|
||||
}
|
||||
|
||||
/// SyncExitFn - LLVM object_sync_exit function.
|
||||
llvm::Constant *getSyncExitFn() {
|
||||
// void objc_sync_exit (id)
|
||||
// int objc_sync_exit (id)
|
||||
llvm::Type *args[] = { ObjectPtrTy };
|
||||
llvm::FunctionType *FTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, args, false);
|
||||
llvm::FunctionType::get(CGM.IntTy, args, false);
|
||||
return CGM.CreateRuntimeFunction(FTy, "objc_sync_exit");
|
||||
}
|
||||
|
||||
|
@ -5891,8 +5891,8 @@ void RewriteModernObjC::Initialize(ASTContext &context) {
|
||||
Preamble += "(const char *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT void objc_exception_throw( struct objc_object *);\n";
|
||||
// @synchronized hooks.
|
||||
Preamble += "__OBJC_RW_DLLIMPORT void objc_sync_enter( struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT void objc_sync_exit( struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT int objc_sync_enter( struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT int objc_sync_exit( struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT Protocol *objc_getProtocol(const char *);\n";
|
||||
Preamble += "#ifndef __FASTENUMERATIONSTATE\n";
|
||||
Preamble += "struct __objcFastEnumerationState {\n\t";
|
||||
|
@ -5112,8 +5112,8 @@ void RewriteObjCFragileABI::Initialize(ASTContext &context) {
|
||||
Preamble += "__OBJC_RW_DLLIMPORT int objc_exception_match";
|
||||
Preamble += "(struct objc_class *, struct objc_object *);\n";
|
||||
// @synchronized hooks.
|
||||
Preamble += "__OBJC_RW_DLLIMPORT void objc_sync_enter(struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT void objc_sync_exit(struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT int objc_sync_enter(struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT int objc_sync_exit(struct objc_object *);\n";
|
||||
Preamble += "__OBJC_RW_DLLIMPORT Protocol *objc_getProtocol(const char *);\n";
|
||||
Preamble += "#ifndef __FASTENUMERATIONSTATE\n";
|
||||
Preamble += "struct __objcFastEnumerationState {\n\t";
|
||||
|
@ -1358,9 +1358,9 @@ void test59(void) {
|
||||
// CHECK: define void @test59()
|
||||
// CHECK: [[T0:%.*]] = call i8* @test59_getlock()
|
||||
// CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]])
|
||||
// CHECK-NEXT: call void @objc_sync_enter(i8* [[T1]])
|
||||
// CHECK-NEXT: call i32 @objc_sync_enter(i8* [[T1]])
|
||||
// CHECK-NEXT: call void @test59_body()
|
||||
// CHECK-NEXT: call void @objc_sync_exit(i8* [[T1]])
|
||||
// CHECK-NEXT: call i32 @objc_sync_exit(i8* [[T1]])
|
||||
// CHECK-NEXT: call void @objc_release(i8* [[T1]])
|
||||
// CHECK-NEXT: ret void
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
// CHECK: define internal void @"\01-[MyClass method]"
|
||||
- (void)method
|
||||
{
|
||||
// CHECK: call void @objc_sync_enter
|
||||
// CHECK: call i32 @objc_sync_enter
|
||||
// CHECK: call void @objc_exception_try_enter
|
||||
// CHECK: call i32 @_setjmp
|
||||
@synchronized(self) {
|
||||
@ -26,21 +26,21 @@ void foo(id a) {
|
||||
// CHECK: [[SYNC:%.*]] = alloca i8*
|
||||
|
||||
// CHECK: store i8* [[AVAL:%.*]], i8** [[A]]
|
||||
// CHECK-NEXT: call void @objc_sync_enter(i8* [[AVAL]])
|
||||
// CHECK-NEXT: call i32 @objc_sync_enter(i8* [[AVAL]])
|
||||
// CHECK-NEXT: store i8* [[AVAL]], i8** [[SYNC]]
|
||||
// CHECK-NEXT: call void @objc_exception_try_enter
|
||||
// CHECK: call i32 @_setjmp
|
||||
@synchronized(a) {
|
||||
// This is unreachable, but the optimizers can't know that.
|
||||
// CHECK: call void asm sideeffect "", "=*m,=*m,=*m"(i8** [[A]], i8** [[SYNC]]
|
||||
// CHECK: call void @objc_sync_exit
|
||||
// CHECK: call i32 @objc_sync_exit
|
||||
// CHECK: call i8* @objc_exception_extract
|
||||
// CHECK: call void @objc_exception_throw
|
||||
// CHECK: unreachable
|
||||
|
||||
// CHECK: call void @objc_exception_try_exit
|
||||
// CHECK: [[T:%.*]] = load i8** [[SYNC]]
|
||||
// CHECK-NEXT: call void @objc_sync_exit
|
||||
// CHECK-NEXT: call i32 @objc_sync_exit
|
||||
// CHECK: ret void
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user