Override the datalayout in a module with -triple.

This matches llc's behavior.

Before this patch clang would create a TargetInfo base on -triple but a llvm
CodeGen based on the triple in the module.

llvm-svn: 197837
This commit is contained in:
Rafael Espindola 2013-12-20 22:01:25 +00:00
parent d2d1cc5156
commit d5e81e59b5
2 changed files with 17 additions and 2 deletions

View File

@ -419,9 +419,18 @@ void CodeGenAction::ExecuteAction() {
CI.getDiagnostics().Report(Loc, DiagID);
return;
}
const TargetOptions &TargetOpts = CI.getTargetOpts();
if (TheModule->getTargetTriple() != TargetOpts.Triple) {
unsigned DiagID = CI.getDiagnostics().getCustomDiagID(
DiagnosticsEngine::Warning,
"overriding the module target triple with %0");
CI.getDiagnostics().Report(SourceLocation(), DiagID) << TargetOpts.Triple;
TheModule->setTargetTriple(TargetOpts.Triple);
}
EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(),
CI.getTargetOpts(), CI.getLangOpts(),
TargetOpts, CI.getLangOpts(),
TheModule.get(),
BA, OS);
return;

View File

@ -1,9 +1,15 @@
; REQUIRES: x86-registered-target
; RUN: %clang_cc1 -S -o - %s | FileCheck %s
; RUN: %clang_cc1 -triple x86_64-apple-darwin10 -S -o - %s | FileCheck %s
; RUN: %clang_cc1 -triple x86_64-pc-linux -S -o %t %s 2>&1 | \
; RUN: FileCheck --check-prefix=WARN %s
; WARN: warning: overriding the module target triple with x86_64-pc-linux
; RUN: FileCheck --check-prefix=LINUX %s < %t
target triple = "x86_64-apple-darwin10"
; CHECK: .globl _f0
; LINUX: .globl f0
define i32 @f0() nounwind ssp {
ret i32 0
}