Skip to content

Commit

Permalink
[clang][Driver] Fix crash with unsupported architectures in MinGW and…
Browse files Browse the repository at this point in the history
… CrossWindows

MinGW and CrossWindows crash if the target is an unsupported target architecture.
Changed it to emit an error message.

Fixes #59545

Reviewed By: MaskRay, mstorsjo

Differential Revision: https://reviews.llvm.org/D148944
  • Loading branch information
k-mana authored and MaskRay committed May 2, 2023
1 parent ea7e69f commit ecad121
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
3 changes: 2 additions & 1 deletion clang/lib/Driver/ToolChains/CrossWindows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ void tools::CrossWindows::Linker::ConstructJob(
CmdArgs.push_back("-m");
switch (TC.getArch()) {
default:
llvm_unreachable("unsupported architecture");
D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();
break;
case llvm::Triple::arm:
case llvm::Triple::thumb:
// FIXME: this is incorrect for WinCE
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Driver/ToolChains/MinGW.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("arm64pe");
break;
default:
llvm_unreachable("Unsupported target architecture.");
D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();
}

Arg *SubsysArg =
Expand Down
8 changes: 8 additions & 0 deletions clang/test/Driver/unsupported-target-arch.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,11 @@
// RUN: not %clang --target=noarch-unknown-nacl -o %t.o %s 2> %t.err
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-NACL %s
// CHECK-NOARCH-NACL: error: the target architecture 'noarch' is not supported by the target 'Native Client'

// RUN: not %clang --target=noarch-unknown-windows-gnu -o %t.o %s 2> %t.err
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-MINGW %s
// CHECK-NOARCH-MINGW: error: unknown target triple 'noarch-unknown-windows-gnu'

// RUN: not %clang --target=noarch-unknown-windows-itanium -o %t.o %s 2> %t.err
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-CROSSWINDOWS %s
// CHECK-NOARCH-CROSSWINDOWS: error: unknown target triple 'noarch-unknown-windows-itanium'

0 comments on commit ecad121

Please sign in to comment.