aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGCall.cpp
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2019-12-09 12:22:27 +0100
committerGuillaume Chatelet <gchatelet@google.com>2019-12-12 17:21:12 +0100
commit0508c994f0b14144041f2cfd3ba9f9a80f03de08 (patch)
treea31e8b07b9a60940698dbfe3628194adec69ca0e /clang/lib/CodeGen/CGCall.cpp
parent65996c302a4472e597780c99bd834f9bf8978712 (diff)
downloadllvm-0508c994f0b14144041f2cfd3ba9f9a80f03de08.zip
llvm-0508c994f0b14144041f2cfd3ba9f9a80f03de08.tar.gz
llvm-0508c994f0b14144041f2cfd3ba9f9a80f03de08.tar.bz2
[clang] Turn -fno-builtin flag into an IR Attribute
Summary: This is a follow up on https://reviews.llvm.org/D61634#1742154 to turn the clang driver -fno-builtin flag into an IR attribute. I also investigated pushing the attribute earlier on (in Sema) but it looks like this patch is simple and will cover all function calls. Reviewers: aaron.ballman, courbet Subscribers: cfe-commits, tejohnson Tags: #clang Differential Revision: https://reviews.llvm.org/D71193
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r--clang/lib/CodeGen/CGCall.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index d41516b..b49b194 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -1877,17 +1877,20 @@ void CodeGenModule::ConstructAttributeList(
if (Fn->isNoReturn())
FuncAttrs.addAttribute(llvm::Attribute::NoReturn);
- if (const auto *NBA = TargetDecl->getAttr<NoBuiltinAttr>()) {
- bool HasWildcard = llvm::is_contained(NBA->builtinNames(), "*");
- if (HasWildcard)
- FuncAttrs.addAttribute("no-builtins");
- else
- for (StringRef BuiltinName : NBA->builtinNames()) {
- SmallString<32> AttributeName;
- AttributeName += "no-builtin-";
- AttributeName += BuiltinName;
- FuncAttrs.addAttribute(AttributeName);
- }
+ const auto *NBA = Fn->getAttr<NoBuiltinAttr>();
+ bool HasWildcard = NBA && llvm::is_contained(NBA->builtinNames(), "*");
+ if (getLangOpts().NoBuiltin || HasWildcard)
+ FuncAttrs.addAttribute("no-builtins");
+ else {
+ auto AddNoBuiltinAttr = [&FuncAttrs](StringRef BuiltinName) {
+ SmallString<32> AttributeName;
+ AttributeName += "no-builtin-";
+ AttributeName += BuiltinName;
+ FuncAttrs.addAttribute(AttributeName);
+ };
+ llvm::for_each(getLangOpts().NoBuiltinFuncs, AddNoBuiltinAttr);
+ if (NBA)
+ llvm::for_each(NBA->builtinNames(), AddNoBuiltinAttr);
}
}
}