From 0508c994f0b14144041f2cfd3ba9f9a80f03de08 Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Mon, 9 Dec 2019 12:22:27 +0100 Subject: [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 --- clang/lib/CodeGen/CGCall.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'clang/lib/CodeGen/CGCall.cpp') diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index d41516b7eab..b49b194d611 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()) { - 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(); + 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); } } } -- cgit v1.2.3