diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 047dc53a0b086e37e78a7bce768ce424285cea5f..6fceabd109f9e80b0606a3820dfb9c5f7fb775b8 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -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; diff --git a/test/Frontend/ir-support-codegen.ll b/test/Frontend/ir-support-codegen.ll index 7f0806111f961b4c75bbf7e68d53d33d2e0d14a6..3dc3c0a571bd3b9cd5089d69940557f97fe67b4b 100644 --- a/test/Frontend/ir-support-codegen.ll +++ b/test/Frontend/ir-support-codegen.ll @@ -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 }