[cfe-commits] r143801 - in /cfe/trunk: include/clang/Driver/CC1Options.td lib/Driver/ToolChains.cpp lib/Frontend/CompilerInvocation.cpp

Hal Finkel hfinkel at anl.gov
Sat Nov 5 02:39:40 PDT 2011


On Sat, 2011-11-05 at 09:24 +0000, Chandler Carruth wrote:
> Author: chandlerc
> Date: Sat Nov  5 04:24:44 2011
> New Revision: 143801
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=143801&view=rev
> Log:
> Fix a significant oversight in my move of MSVC includes to the driver:
> actually manage the builtin header file includes as well as the system
> ones.
> 
> This one is actually debatable whether it belongs in the driver or not,
> as the builtin includes are really an internal bit of implementation
> goop for Clang. However, they must be included at *exactly* the right
> point in the sequence of header files, which makes it essentially
> impossible to have this be managed by the Frontend and the rest by the
> Driver. I have terrible ideas that would "work", but I think they're
> worse than putting this in the driver and making the Frontend library
> even more ignorant of the environment and system on which it is being
> run.
> 
> Also fix the fact that we weren't properly respecting the flags which
> suppress standard system include directories.
> 
> Note that this still leaves all of the Clang tests which run CC1
> directly and include builtin header files broken on Windows. I'm working
> on a followup patch to address that.
> 
> Modified:
>     cfe/trunk/include/clang/Driver/CC1Options.td
>     cfe/trunk/lib/Driver/ToolChains.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> 
> Modified: cfe/trunk/include/clang/Driver/CC1Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=143801&r1=143800&r2=143801&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
> +++ cfe/trunk/include/clang/Driver/CC1Options.td Sat Nov  5 04:24:44 2011
> @@ -670,6 +670,12 @@
>             "implicit extern \"C\" semantics; these are assumed to not be "
>             "user-provided and are used to model system and standard headers' "
>             "paths.">;
> +def internal_nosysroot_isystem : JoinedOrSeparate<"-internal-nosysroot-isystem">,
> +  MetaVarName<"<directory>">,
> +  HelpText<"Add directory to the internal system include search path without "
> +           "applying a sysroot to it; these are assumed to not be "

I think that it would be better to use a descriptive verb such as
"prepending the" or "prefixing" instead of "applying a".

 -Hal

> +           "user-provided and are used to model system and standard headers' "
> +           "paths.">;
>  def iprefix : JoinedOrSeparate<"-iprefix">, MetaVarName<"<prefix>">,
>    HelpText<"Set the -iwithprefix/-iwithprefixbefore prefix">;
>  def iwithprefix : JoinedOrSeparate<"-iwithprefix">, MetaVarName<"<dir>">,
> 
> Modified: cfe/trunk/lib/Driver/ToolChains.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=143801&r1=143800&r2=143801&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChains.cpp (original)
> +++ cfe/trunk/lib/Driver/ToolChains.cpp Sat Nov  5 04:24:44 2011
> @@ -2253,6 +2253,21 @@
>  
>  void Windows::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
>                                          ArgStringList &CC1Args) const {
> +  if (DriverArgs.hasArg(options::OPT_nostdinc))
> +    return;
> +
> +  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
> +    // Ignore the sysroot, we *always* look for clang headers relative to
> +    // supplied path.
> +    llvm::sys::Path P(getDriver().ResourceDir);
> +    P.appendComponent("include");
> +    CC1Args.push_back("-internal-nosysroot-isystem");
> +    CC1Args.push_back(DriverArgs.MakeArgString(P.str()));
> +  }
> +
> +  if (DriverArgs.hasArg(options::OPT_nostdlibinc))
> +    return;
> +
>    std::string VSDir;
>    std::string WindowsSDKDir;
>  
> 
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=143801&r1=143800&r2=143801&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Sat Nov  5 04:24:44 2011
> @@ -577,8 +577,12 @@
>      } else {
>        if (E.IsInternal) {
>          assert(E.Group == frontend::System && "Unexpected header search group");
> -        Res.push_back(E.ImplicitExternC ? "-internal-externc-isystem"
> -                                        : "-internal-isystem");
> +        if (E.IgnoreSysRoot)
> +          Res.push_back("-internal-nosysroot-isystem");
> +        else 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!");
> @@ -1492,11 +1496,14 @@
>  
>    // 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),
> +                                            OPT_internal_externc_isystem,
> +                                            OPT_internal_nosysroot_isystem),
>                      E = Args.filtered_end();
>         I != E; ++I)
>      Opts.AddPath((*I)->getValue(Args), frontend::System,
> -                 false, false, false, /*IsInternal=*/true,
> +                 false, false,
> +                 (*I)->getOption().matches(OPT_internal_nosysroot_isystem),
> +                 /*IsInternal=*/true,
>                   (*I)->getOption().matches(OPT_internal_externc_isystem));
>  }
>  
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory




More information about the cfe-commits mailing list