diff options
author | Hans Wennborg <hans@chromium.org> | 2020-01-17 12:51:06 +0100 |
---|---|---|
committer | Hans Wennborg <hans@chromium.org> | 2020-01-17 12:51:06 +0100 |
commit | b28326516ca3ad9d51688532e944f491ce8b7908 (patch) | |
tree | 328ef7c185679b25ed5fd913bbe2b59c00f86537 /clang/lib/CodeGen/CGExpr.cpp | |
parent | 9007f06af0e009f41b876ae30e6b1ca96feee02e (diff) | |
download | bcm5719-llvm-b28326516ca3ad9d51688532e944f491ce8b7908.tar.gz bcm5719-llvm-b28326516ca3ad9d51688532e944f491ce8b7908.zip |
Revert 9007f06af0e "Revert "Allow system header to provide their own implementation of some builtin""
This should no longer be necessary after
cd4c65f91d5 "Add __warn_memset_zero_len builtin as a workaround for glibc issue"
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index b23d9df5f4b..8e0604181fb 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -4621,8 +4621,15 @@ RValue CodeGenFunction::EmitSimpleCallExpr(const CallExpr *E, } static CGCallee EmitDirectCallee(CodeGenFunction &CGF, const FunctionDecl *FD) { + if (auto builtinID = FD->getBuiltinID()) { - return CGCallee::forBuiltin(builtinID, FD); + // Replaceable builtin provide their own implementation of a builtin. Unless + // we are in the builtin implementation itself, don't call the actual + // builtin. If we are in the builtin implementation, avoid trivial infinite + // recursion. + if (!FD->isInlineBuiltinDeclaration() || + CGF.CurFn->getName() == FD->getName()) + return CGCallee::forBuiltin(builtinID, FD); } llvm::Constant *calleePtr = EmitFunctionDeclPointer(CGF.CGM, FD); |