r177840 - Reject -no-integrated-as on windows.

Aaron Ballman aaron at aaronballman.com
Sun Mar 24 08:19:10 PDT 2013


But there are external assemblers you can use if they're installed.
Wouldn't it be better to make use of things like MASM and NASM if
they're installed, and then fall back on this behavior if we can't
locate them?

~Aaron

On Sun, Mar 24, 2013 at 11:06 AM, Rafael Espindola
<rafael.espindola at gmail.com> wrote:
> Author: rafael
> Date: Sun Mar 24 10:06:53 2013
> New Revision: 177840
>
> URL: http://llvm.org/viewvc/llvm-project?rev=177840&view=rev
> Log:
> Reject -no-integrated-as on windows.
>
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
>     cfe/trunk/include/clang/Driver/ToolChain.h
>     cfe/trunk/lib/Driver/Driver.cpp
>     cfe/trunk/lib/Driver/ToolChain.cpp
>     cfe/trunk/lib/Driver/WindowsToolChain.cpp
>     cfe/trunk/test/Driver/inhibit-downstream-commands.c
>     cfe/trunk/test/Driver/no-integrated-as-win.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Sun Mar 24 10:06:53 2013
> @@ -35,6 +35,8 @@ def err_drv_use_of_Z_option : Error<
>    "unsupported use of internal gcc -Z option '%0'">;
>  def err_drv_output_argument_with_multiple_files : Error<
>    "cannot specify -o when generating multiple output files">;
> +def err_no_external_windows_assembler : Error<
> +  "there is no external assembler we can use on windows">;
>  def err_drv_unable_to_remove_file : Error<
>    "unable to remove file: %0">;
>  def err_drv_command_failure : Error<
>
> Modified: cfe/trunk/include/clang/Driver/ToolChain.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/ToolChain.h (original)
> +++ cfe/trunk/include/clang/Driver/ToolChain.h Sun Mar 24 10:06:53 2013
> @@ -127,7 +127,7 @@ public:
>    }
>
>    /// Choose a tool to use to handle the action \p JA.
> -  Tool &SelectTool(const JobAction &JA) const;
> +  Tool *SelectTool(const JobAction &JA) const;
>
>    // Helper methods
>
>
> Modified: cfe/trunk/lib/Driver/Driver.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/Driver.cpp (original)
> +++ cfe/trunk/lib/Driver/Driver.cpp Sun Mar 24 10:06:53 2013
> @@ -1288,7 +1288,7 @@ void Driver::BuildJobs(Compilation &C) c
>    }
>  }
>
> -static const Tool &SelectToolForJob(Compilation &C, const ToolChain *TC,
> +static const Tool *SelectToolForJob(Compilation &C, const ToolChain *TC,
>                                      const JobAction *JA,
>                                      const ActionList *&Inputs) {
>    const Tool *ToolForJob = 0;
> @@ -1301,17 +1301,19 @@ static const Tool &SelectToolForJob(Comp
>        !C.getArgs().hasArg(options::OPT_save_temps) &&
>        isa<AssembleJobAction>(JA) &&
>        Inputs->size() == 1 && isa<CompileJobAction>(*Inputs->begin())) {
> -    const Tool &Compiler =
> +    const Tool *Compiler =
>        TC->SelectTool(cast<JobAction>(**Inputs->begin()));
> -    if (Compiler.hasIntegratedAssembler()) {
> +    if (!Compiler)
> +      return NULL;
> +    if (Compiler->hasIntegratedAssembler()) {
>        Inputs = &(*Inputs)[0]->getInputs();
> -      ToolForJob = &Compiler;
> +      ToolForJob = Compiler;
>      }
>    }
>
>    // Otherwise use the tool for the current job.
>    if (!ToolForJob)
> -    ToolForJob = &TC->SelectTool(*JA);
> +    ToolForJob = TC->SelectTool(*JA);
>
>    // See if we should use an integrated preprocessor. We do so when we have
>    // exactly one input, since this is the only use case we care about
> @@ -1324,7 +1326,7 @@ static const Tool &SelectToolForJob(Comp
>        ToolForJob->hasIntegratedCPP())
>      Inputs = &(*Inputs)[0]->getInputs();
>
> -  return *ToolForJob;
> +  return ToolForJob;
>  }
>
>  void Driver::BuildJobsForAction(Compilation &C,
> @@ -1366,7 +1368,9 @@ void Driver::BuildJobsForAction(Compilat
>    const ActionList *Inputs = &A->getInputs();
>
>    const JobAction *JA = cast<JobAction>(A);
> -  const Tool &T = SelectToolForJob(C, TC, JA, Inputs);
> +  const Tool *T = SelectToolForJob(C, TC, JA, Inputs);
> +  if (!T)
> +    return;
>
>    // Only use pipes when there is exactly one input.
>    InputInfoList InputInfos;
> @@ -1401,8 +1405,8 @@ void Driver::BuildJobsForAction(Compilat
>                         A->getType(), BaseInput);
>
>    if (CCCPrintBindings && !CCGenDiagnostics) {
> -    llvm::errs() << "# \"" << T.getToolChain().getTripleString() << '"'
> -                 << " - \"" << T.getName() << "\", inputs: [";
> +    llvm::errs() << "# \"" << T->getToolChain().getTripleString() << '"'
> +                 << " - \"" << T->getName() << "\", inputs: [";
>      for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) {
>        llvm::errs() << InputInfos[i].getAsString();
>        if (i + 1 != e)
> @@ -1410,8 +1414,8 @@ void Driver::BuildJobsForAction(Compilat
>      }
>      llvm::errs() << "], output: " << Result.getAsString() << "\n";
>    } else {
> -    T.ConstructJob(C, *JA, Result, InputInfos,
> -                   C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
> +    T->ConstructJob(C, *JA, Result, InputInfos,
> +                    C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
>    }
>  }
>
>
> Modified: cfe/trunk/lib/Driver/ToolChain.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/ToolChain.cpp (original)
> +++ cfe/trunk/lib/Driver/ToolChain.cpp Sun Mar 24 10:06:53 2013
> @@ -117,13 +117,13 @@ Tool *ToolChain::getTool(Action::ActionC
>    llvm_unreachable("Invalid tool kind.");
>  }
>
> -Tool &ToolChain::SelectTool(const JobAction &JA) const {
> +Tool *ToolChain::SelectTool(const JobAction &JA) const {
>    if (getDriver().ShouldUseClangCompiler(JA))
> -    return *getClang();
> +    return getClang();
>    Action::ActionClass AC = JA.getKind();
>    if (AC == Action::AssembleJobClass && useIntegratedAs())
> -    return *getClangAs();
> -  return *getTool(AC);
> +    return getClangAs();
> +  return getTool(AC);
>  }
>
>  std::string ToolChain::GetFilePath(const char *Name) const {
>
> Modified: cfe/trunk/lib/Driver/WindowsToolChain.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/WindowsToolChain.cpp?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/WindowsToolChain.cpp (original)
> +++ cfe/trunk/lib/Driver/WindowsToolChain.cpp Sun Mar 24 10:06:53 2013
> @@ -14,6 +14,7 @@
>  #include "clang/Driver/ArgList.h"
>  #include "clang/Driver/Compilation.h"
>  #include "clang/Driver/Driver.h"
> +#include "clang/Driver/DriverDiagnostic.h"
>  #include "clang/Driver/Options.h"
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/Path.h"
> @@ -43,10 +44,8 @@ Tool *Windows::buildLinker() const {
>  Tool *Windows::buildAssembler() const {
>    if (getTriple().getEnvironment() == llvm::Triple::MachO)
>      return new tools::darwin::Assemble(*this);
> -  else
> -    // There no assembler we can use on windows other than the integrated
> -    // assembler, so we ignore -no-integrated-as.
> -    return ToolChain::buildAssembler();
> +  getDriver().Diag(clang::diag::err_no_external_windows_assembler);
> +  return NULL;
>  }
>
>  bool Windows::IsIntegratedAssemblerDefault() const {
>
> Modified: cfe/trunk/test/Driver/inhibit-downstream-commands.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/inhibit-downstream-commands.c?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/test/Driver/inhibit-downstream-commands.c (original)
> +++ cfe/trunk/test/Driver/inhibit-downstream-commands.c Sun Mar 24 10:06:53 2013
> @@ -2,4 +2,5 @@
>  // CHECK: error: unknown type name 'invalid'
>  // CHECK-NOT: clang: error: assembler command failed
>  // CHECK-NOT: clang: error: linker command failed
> +// XFAIL: win32
>  invalid C code!
>
> Modified: cfe/trunk/test/Driver/no-integrated-as-win.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/no-integrated-as-win.c?rev=177840&r1=177839&r2=177840&view=diff
> ==============================================================================
> --- cfe/trunk/test/Driver/no-integrated-as-win.c (original)
> +++ cfe/trunk/test/Driver/no-integrated-as-win.c Sun Mar 24 10:06:53 2013
> @@ -1,3 +1,3 @@
>  // RUN: %clang -target x86_64-pc-win32 -### -no-integrated-as %s -c 2>&1 | FileCheck %s
>
> -// CHECK: cc1as" "-triple" "x86_64-pc-win32"
> +// CHECK: there is no external assembler we can use on windows
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list