MadCoder created this revision. MadCoder added reviewers: rjmccall, arphaman, dexonsmith. MadCoder added a project: clang. Herald added a subscriber: cfe-commits. MadCoder added a comment.
turns out that I had no codegen check for the call site and that one of the last iteration broke it trivially :'( Radar-Id: rdar://problem/57661767 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D71091 Files: clang/lib/Sema/SemaDeclObjC.cpp clang/test/CodeGenObjC/direct-method.m Index: clang/test/CodeGenObjC/direct-method.m =================================================================== --- clang/test/CodeGenObjC/direct-method.m +++ clang/test/CodeGenObjC/direct-method.m @@ -173,3 +173,9 @@ // CHECK-LABEL: define hidden void @"\01-[Foo setGetDynamic_setDirect:]"( // CHECK-LABEL: define internal void @"\01-[Foo .cxx_destruct]"( @end + +int useRoot(Root *r) { + // CHEC-LABEL: define i32 @useRoot + // CHECK: %call = call i32 bitcast {{.*}} @"\01-[Root getInt]" + return [r getInt]; +} Index: clang/lib/Sema/SemaDeclObjC.cpp =================================================================== --- clang/lib/Sema/SemaDeclObjC.cpp +++ clang/lib/Sema/SemaDeclObjC.cpp @@ -4836,6 +4836,10 @@ cast<DeclContext>(ClassDecl)->addDecl(ObjCMethod); } + if (ObjCMethod->isDirectMethod()) { + ObjCMethod->createImplicitParams(Context, ObjCMethod->getClassInterface()); + } + if (PrevMethod) { // You can never have two method definitions with the same name. Diag(ObjCMethod->getLocation(), diag::err_duplicate_method_decl)
Index: clang/test/CodeGenObjC/direct-method.m =================================================================== --- clang/test/CodeGenObjC/direct-method.m +++ clang/test/CodeGenObjC/direct-method.m @@ -173,3 +173,9 @@ // CHECK-LABEL: define hidden void @"\01-[Foo setGetDynamic_setDirect:]"( // CHECK-LABEL: define internal void @"\01-[Foo .cxx_destruct]"( @end + +int useRoot(Root *r) { + // CHEC-LABEL: define i32 @useRoot + // CHECK: %call = call i32 bitcast {{.*}} @"\01-[Root getInt]" + return [r getInt]; +} Index: clang/lib/Sema/SemaDeclObjC.cpp =================================================================== --- clang/lib/Sema/SemaDeclObjC.cpp +++ clang/lib/Sema/SemaDeclObjC.cpp @@ -4836,6 +4836,10 @@ cast<DeclContext>(ClassDecl)->addDecl(ObjCMethod); } + if (ObjCMethod->isDirectMethod()) { + ObjCMethod->createImplicitParams(Context, ObjCMethod->getClassInterface()); + } + if (PrevMethod) { // You can never have two method definitions with the same name. Diag(ObjCMethod->getLocation(), diag::err_duplicate_method_decl)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits