[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