diff options
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 1debf3b353187..02b4ec04fd263 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, | 
