diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-12-09 18:30:42 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-12-09 18:30:42 +0000 | 
| commit | 9da628931ebf2609493570f87824ca22402cc65f (patch) | |
| tree | 81d5fcacdf8f076da7b2359bb7d62be6a453f0da /lib/Frontend/CompilerInvocation.cpp | |
| parent | 36981b17ed939300f6f8fc2355a255f711fcef71 (diff) | |
Notes
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 1debf3b35318..02b4ec04fd26 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, | 
