diff options
author | Guillaume Chatelet <gchatelet@google.com> | 2019-12-09 12:22:27 +0100 |
---|---|---|
committer | Guillaume Chatelet <gchatelet@google.com> | 2019-12-12 17:21:12 +0100 |
commit | 0508c994f0b14144041f2cfd3ba9f9a80f03de08 (patch) | |
tree | a31e8b07b9a60940698dbfe3628194adec69ca0e /clang/lib/CodeGen/CGCall.cpp | |
parent | 65996c302a4472e597780c99bd834f9bf8978712 (diff) | |
download | llvm-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.cpp | 25 |
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); } } } |