diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2016-01-06 14:35:46 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2016-01-06 14:35:46 +0000 |
commit | 7dbc9cf8760e07f28cea29e337ff3666624dc91d (patch) | |
tree | 535726e6c08e0a98ffbb3de5e2a3280cc32acaf6 /clang/lib/Driver/Tools.cpp | |
parent | 2d0418e842e1635aaff4a642320dfa8fbf7669fd (diff) | |
download | llvm-7dbc9cf8760e07f28cea29e337ff3666624dc91d.zip llvm-7dbc9cf8760e07f28cea29e337ff3666624dc91d.tar.gz llvm-7dbc9cf8760e07f28cea29e337ff3666624dc91d.tar.bz2 |
[Driver] Add support for -fno-builtin-foo options.
Addresses PR4941 and rdar://6756912.
http://reviews.llvm.org/D15195
llvm-svn: 256937
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 7923b83..8468105 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -4740,11 +4740,33 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, A->render(Args, CmdArgs); } - // -fbuiltin is default unless -mkernel is used - if (!Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin, - !Args.hasArg(options::OPT_mkernel))) + // -fbuiltin is default unless -mkernel is used. + bool UseBuiltins = + Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin, + !Args.hasArg(options::OPT_mkernel)); + if (!UseBuiltins) CmdArgs.push_back("-fno-builtin"); + // -ffreestanding implies -fno-builtin. + if (Args.hasArg(options::OPT_ffreestanding)) + UseBuiltins = false; + + // Process the -fno-builtin-* options. + for (const auto &Arg : Args) { + const Option &O = Arg->getOption(); + if (!O.matches(options::OPT_fno_builtin_)) + continue; + + Arg->claim(); + // If -fno-builtin is specified, then there's no need to pass the option to + // the frontend. + if (!UseBuiltins) + continue; + + StringRef FuncName = Arg->getValue(); + CmdArgs.push_back(Args.MakeArgString("-fno-builtin-" + FuncName)); + } + if (!Args.hasFlag(options::OPT_fassume_sane_operator_new, options::OPT_fno_assume_sane_operator_new)) CmdArgs.push_back("-fno-assume-sane-operator-new"); |