Skip to content

Commit ecad121

Browse files
k-manaMaskRay
authored andcommitted
[clang][Driver] Fix crash with unsupported architectures in MinGW and 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
1 parent ea7e69f commit ecad121

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

clang/lib/Driver/ToolChains/CrossWindows.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ void tools::CrossWindows::Linker::ConstructJob(
9494
CmdArgs.push_back("-m");
9595
switch (TC.getArch()) {
9696
default:
97-
llvm_unreachable("unsupported architecture");
97+
D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();
98+
break;
9899
case llvm::Triple::arm:
99100
case llvm::Triple::thumb:
100101
// FIXME: this is incorrect for WinCE

clang/lib/Driver/ToolChains/MinGW.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
135135
CmdArgs.push_back("arm64pe");
136136
break;
137137
default:
138-
llvm_unreachable("Unsupported target architecture.");
138+
D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();
139139
}
140140

141141
Arg *SubsysArg =

clang/test/Driver/unsupported-target-arch.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,11 @@
2323
// RUN: not %clang --target=noarch-unknown-nacl -o %t.o %s 2> %t.err
2424
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-NACL %s
2525
// CHECK-NOARCH-NACL: error: the target architecture 'noarch' is not supported by the target 'Native Client'
26+
27+
// RUN: not %clang --target=noarch-unknown-windows-gnu -o %t.o %s 2> %t.err
28+
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-MINGW %s
29+
// CHECK-NOARCH-MINGW: error: unknown target triple 'noarch-unknown-windows-gnu'
30+
31+
// RUN: not %clang --target=noarch-unknown-windows-itanium -o %t.o %s 2> %t.err
32+
// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-CROSSWINDOWS %s
33+
// CHECK-NOARCH-CROSSWINDOWS: error: unknown target triple 'noarch-unknown-windows-itanium'

0 commit comments

Comments
 (0)