diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp
index 57f55aacfa609f55640c96e8f0389b6ee0249c05..a79b3e33235ba75a3ad2d643cab7fa5bbb961c02 100644
--- a/lib/CodeGen/CGStmt.cpp
+++ b/lib/CodeGen/CGStmt.cpp
@@ -1754,7 +1754,7 @@ llvm::Value* CodeGenFunction::EmitAsmInput(
   // (immediate or symbolic), try to emit it as such.
   if (!Info.allowsRegister() && !Info.allowsMemory()) {
     llvm::APSInt Result;
-    if (InputExpr->isIntegerConstantExpr(Result, getContext()))
+    if (InputExpr->EvaluateAsInt(Result, getContext()))
       return llvm::ConstantInt::get(getLLVMContext(), Result);
     assert(!Info.requiresImmediateConstant() &&
            "Required-immediate inlineasm arg isn't constant?");
diff --git a/test/CodeGen/inline-asm-immediate-ubsan.c b/test/CodeGen/inline-asm-immediate-ubsan.c
index 2773c6eb9d7ebd8441070690533fadd6a32beae9..77d5e4f557c08a8d35bdcdb95865c990b938c4e5 100644
--- a/test/CodeGen/inline-asm-immediate-ubsan.c
+++ b/test/CodeGen/inline-asm-immediate-ubsan.c
@@ -20,6 +20,11 @@ void test_inlineasm_i() {
 
 // CHECK-LABEL: @test_inlineasm_I
 // CHECK: call void asm sideeffect "int $0", "I{{.*}}"(i32 2)
+// CHECK: call void asm sideeffect "int $0", "I{{.*}}"(i32 3)
 void test_inlineasm_I() {
   __asm__ __volatile__("int %0" :: "I"(1 + 1));
+
+  // Also check a C non-ICE.
+  static const int N = 1;
+  __asm__ __volatile__("int %0" :: "I"(N + 2));
 }