[IRGen] Fix an assert when __attribute__((used)) is used on an ObjC method

This assert doesn't really make sense for functions in general, since they
start life as declarations, and there isn't really any reason to require them
to be defined before attributes are applied to them.

rdar://67895846
This commit is contained in:
Erik Pilkington
2020-09-01 11:52:28 -04:00
parent ddd48cdba6
commit 8ff44e644b
2 changed files with 12 additions and 1 deletions

View File

@@ -1989,7 +1989,7 @@ void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
}
void CodeGenModule::addUsedGlobal(llvm::GlobalValue *GV) {
assert(!GV->isDeclaration() &&
assert(isa<llvm::Function>(GV) || !GV->isDeclaration() &&
"Only globals with definition can force usage.");
LLVMUsed.emplace_back(GV);
}

View File

@@ -0,0 +1,11 @@
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.10 %s -S -emit-llvm -o - | FileCheck %s
// CHECK: @llvm.used =
// CHECK-SAME: @"\01-[X m]"
// CHECK: define internal void @"\01-[X m]"(
@interface X @end
@implementation X
-(void) m __attribute__((used)) {}
@end