mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-07 16:42:34 +00:00
Put target deduced from executable name at the start of argument list
When clang is called as 'target-clang', put deduced target option at the start of argument list so that option '--target=' specified in command line could override it. This change fixes PR34671. llvm-svn: 313760
This commit is contained in:
parent
77f61badf4
commit
3b7d381169
16
clang/test/Driver/target-override.c
Normal file
16
clang/test/Driver/target-override.c
Normal file
@ -0,0 +1,16 @@
|
||||
// REQUIRES: shell
|
||||
// REQUIRES: x86-registered-target
|
||||
|
||||
// RUN: mkdir -p %T/testbin
|
||||
// RUN: [ ! -s %T/testbin/i386-clang ] || rm %T/testbin/i386-clang
|
||||
// RUN: ln -s %clang %T/testbin/i386-clang
|
||||
|
||||
// Check if invocation of "foo-clang" adds option "-target foo".
|
||||
//
|
||||
// RUN: %T/testbin/i386-clang -c -no-canonical-prefixes %s -### 2>&1 | FileCheck -check-prefix CHECK-TG1 %s
|
||||
// CHECK-TG1: Target: i386
|
||||
|
||||
// Check if invocation of "foo-clang -target bar" overrides option "-target foo".
|
||||
//
|
||||
// RUN: %T/testbin/i386-clang -c -no-canonical-prefixes -target x86_64 %s -### 2>&1 | FileCheck -check-prefix CHECK-TG2 %s
|
||||
// CHECK-TG2: Target: x86_64
|
@ -209,16 +209,23 @@ extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,
|
||||
static void insertTargetAndModeArgs(const ParsedClangName &NameParts,
|
||||
SmallVectorImpl<const char *> &ArgVector,
|
||||
std::set<std::string> &SavedStrings) {
|
||||
// Put target and mode arguments at the start of argument list so that
|
||||
// arguments specified in command line could override them. Avoid putting
|
||||
// them at index 0, as an option like '-cc1' must remain the first.
|
||||
auto InsertionPoint = ArgVector.begin();
|
||||
if (InsertionPoint != ArgVector.end())
|
||||
++InsertionPoint;
|
||||
|
||||
if (NameParts.DriverMode) {
|
||||
// Add the mode flag to the arguments.
|
||||
ArgVector.insert(ArgVector.end(),
|
||||
ArgVector.insert(InsertionPoint,
|
||||
GetStableCStr(SavedStrings, NameParts.DriverMode));
|
||||
}
|
||||
|
||||
if (NameParts.TargetIsValid) {
|
||||
const char *arr[] = {"-target", GetStableCStr(SavedStrings,
|
||||
NameParts.TargetPrefix)};
|
||||
ArgVector.insert(ArgVector.end(), std::begin(arr), std::end(arr));
|
||||
ArgVector.insert(InsertionPoint, std::begin(arr), std::end(arr));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user