diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp
index 047dc53..c58116a 100644
--- a/lib/CodeGen/CodeGenAction.cpp
+++ b/lib/CodeGen/CodeGenAction.cpp
@@ -419,9 +419,18 @@ void CodeGenAction::ExecuteAction() {
       CI.getDiagnostics().Report(Loc, DiagID);
       return;
     }
+    TargetOptions &TargetOpts = CI.getTargetOpts();
+    if (TheModule->getTargetTriple() != TargetOpts.Triple) {
+      unsigned DiagID = CI.getDiagnostics().getCustomDiagID(
+          DiagnosticsEngine::Error,
+          "The input file triple doesn't match the -triple option");
+
+      CI.getDiagnostics().Report(SourceLocation(), DiagID);
+      return;
+    }
 
     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 7f08061..317a90a 100644
--- a/test/Frontend/ir-support-codegen.ll
+++ b/test/Frontend/ir-support-codegen.ll
@@ -1,5 +1,9 @@
 ; 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: not %clang_cc1 -triple i686-apple-darwin10 -S -o - %s 2>&1 | \
+; RUN: FileCheck --check-prefix=ERR %s
+; ERR: error: The input file triple doesn't match the -triple option
 
 target triple = "x86_64-apple-darwin10"
 
