diff options
author | dim <dim@FreeBSD.org> | 2011-12-09 18:30:42 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2011-12-09 18:30:42 +0000 |
commit | dc04cb328508e61aad809d9b53b12f9799a00e7d (patch) | |
tree | 81d5fcacdf8f076da7b2359bb7d62be6a453f0da /lib/Frontend/CompilerInvocation.cpp | |
parent | 3963a48221351c61c17fb3f382341ab04809a3d3 (diff) | |
download | FreeBSD-src-dc04cb328508e61aad809d9b53b12f9799a00e7d.zip FreeBSD-src-dc04cb328508e61aad809d9b53b12f9799a00e7d.tar.gz |
Vendor import of clang 3.0 final release:
http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_30/final@145349
Diffstat (limited to 'lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | lib/Frontend/CompilerInvocation.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 1debf3b..02b4ec0 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -569,10 +569,18 @@ static void HeaderSearchOptsToArgs(const HeaderSearchOptions &Opts, break; } } else { - if (E.Group != frontend::Angled && E.Group != frontend::System) - llvm::report_fatal_error("Invalid option set!"); - Res.push_back(E.Group == frontend::Angled ? "-iwithprefixbefore" : - "-iwithprefix"); + if (E.IsInternal) { + assert(E.Group == frontend::System && "Unexpected header search group"); + if (E.ImplicitExternC) + Res.push_back("-internal-externc-isystem"); + else + Res.push_back("-internal-isystem"); + } else { + if (E.Group != frontend::Angled && E.Group != frontend::System) + llvm::report_fatal_error("Invalid option set!"); + Res.push_back(E.Group == frontend::Angled ? "-iwithprefixbefore" : + "-iwithprefix"); + } } Res.push_back(E.Path); } @@ -1462,6 +1470,15 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) { ie = Args.filtered_end(); it != ie; ++it) Opts.AddPath((*it)->getValue(Args), frontend::ObjCXXSystem, true, false, true); + + // Add the internal paths from a driver that detects standard include paths. + for (arg_iterator I = Args.filtered_begin(OPT_internal_isystem, + OPT_internal_externc_isystem), + E = Args.filtered_end(); + I != E; ++I) + Opts.AddPath((*I)->getValue(Args), frontend::System, + false, false, /*IgnoreSysRoot=*/true, /*IsInternal=*/true, + (*I)->getOption().matches(OPT_internal_externc_isystem)); } void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, |