зеркало из https://github.com/microsoft/clang.git
objc_msgSend is not a builtin type in non-objc mode.
Fixes //rdar://8686888 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119813 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a30d6cdc3a
Коммит
0bc5c66a1c
|
@ -4295,8 +4295,13 @@ Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
|
||||||
if (CheckFunctionCall(FDecl, TheCall))
|
if (CheckFunctionCall(FDecl, TheCall))
|
||||||
return ExprError();
|
return ExprError();
|
||||||
|
|
||||||
if (unsigned BuiltinID = FDecl->getBuiltinID())
|
if (unsigned BuiltinID = FDecl->getBuiltinID()) {
|
||||||
return CheckBuiltinFunctionCall(BuiltinID, TheCall);
|
// When not in Objective-C mode, there is no builtin 'id' type.
|
||||||
|
// We won't have pre-defined library functions which use this type.
|
||||||
|
if (getLangOptions().ObjC1 ||
|
||||||
|
Context.BuiltinInfo.GetTypeString(BuiltinID)[0] != 'G')
|
||||||
|
return CheckBuiltinFunctionCall(BuiltinID, TheCall);
|
||||||
|
}
|
||||||
} else if (NDecl) {
|
} else if (NDecl) {
|
||||||
if (CheckBlockCall(NDecl, TheCall))
|
if (CheckBlockCall(NDecl, TheCall))
|
||||||
return ExprError();
|
return ExprError();
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
// RUN: %clang_cc1 %s -fsyntax-only -verify
|
||||||
|
// rdar://8686888
|
||||||
|
|
||||||
|
typedef struct objc_selector *SEL;
|
||||||
|
typedef struct objc_object *id;
|
||||||
|
|
||||||
|
extern "C" __attribute__((visibility("default"))) id objc_msgSend(id self, SEL op, ...)
|
||||||
|
__attribute__((visibility("default")));
|
||||||
|
|
||||||
|
inline void TCFReleaseGC(void * object)
|
||||||
|
{
|
||||||
|
static SEL SEL_release;
|
||||||
|
objc_msgSend((id)object, SEL_release);
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче