diff --git a/include/llvm/MC/MCAsmParser.h b/include/llvm/MC/MCAsmParser.h
index a3c10f9..f1ce323 100644
--- a/include/llvm/MC/MCAsmParser.h
+++ b/include/llvm/MC/MCAsmParser.h
@@ -55,8 +55,7 @@
   /// @param Res - The value of the expression. The result is undefined
   /// on error.
   /// @result - False on success.
-  virtual bool ParseExpression(const MCExpr *&Res,
-                               SMLoc &StartLoc, SMLoc &EndLoc) = 0;
+  virtual bool ParseExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0;
   bool ParseExpression(const MCExpr *&Res);
   
   /// ParseParenExpression - Parse an arbitrary expression, assuming that an
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index b350c9f..c2459c9 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -279,10 +279,10 @@
   }
   case AsmToken::Dollar: {
     // $42 -> immediate.
+    SMLoc Start = getLexer().getTok().getLoc(), End;
     getLexer().Lex();
     const MCExpr *Val;
-    SMLoc Start, End;
-    if (getParser().ParseExpression(Val, Start, End))
+    if (getParser().ParseExpression(Val, End))
       return 0;
     return X86Operand::CreateImm(Val, Start, End);
   }
@@ -302,15 +302,15 @@
   // it.
   const MCExpr *Disp = MCConstantExpr::Create(0, getParser().getContext());
   if (getLexer().isNot(AsmToken::LParen)) {
-    SMLoc ExprStart, ExprEnd;
-    if (getParser().ParseExpression(Disp, MemStart, ExprEnd)) return 0;
+    SMLoc ExprEnd;
+    if (getParser().ParseExpression(Disp, ExprEnd)) return 0;
     
     // After parsing the base expression we could either have a parenthesized
     // memory address or not.  If not, return now.  If so, eat the (.
     if (getLexer().isNot(AsmToken::LParen)) {
       // Unless we have a segment register, treat this as an immediate.
       if (SegReg == 0)
-        return X86Operand::CreateImm(Disp, ExprStart, ExprEnd);
+        return X86Operand::CreateImm(Disp, MemStart, ExprEnd);
       return X86Operand::CreateMem(SegReg, Disp, 0, 0, 1, MemStart, ExprEnd);
     }
     
diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp
index 4e03646..d4af4bd 100644
--- a/tools/llvm-mc/AsmParser.cpp
+++ b/tools/llvm-mc/AsmParser.cpp
@@ -271,8 +271,8 @@
 }
 
 bool AsmParser::ParseExpression(const MCExpr *&Res) {
-  SMLoc L;
-  return ParseExpression(Res, L, L);
+  SMLoc EndLoc;
+  return ParseExpression(Res, EndLoc);
 }
 
 /// ParseExpression - Parse an expression and return it.
@@ -282,9 +282,7 @@
 ///  expr ::= expr *,/,%,<<,>> expr  -> highest.
 ///  expr ::= primaryexpr
 ///
-bool AsmParser::ParseExpression(const MCExpr *&Res,
-                                SMLoc &StartLoc, SMLoc &EndLoc) {
-  StartLoc = Lexer.getLoc();
+bool AsmParser::ParseExpression(const MCExpr *&Res, SMLoc &EndLoc) {
   Res = 0;
   return ParsePrimaryExpr(Res, EndLoc) ||
          ParseBinOpRHS(1, Res, EndLoc);
diff --git a/tools/llvm-mc/AsmParser.h b/tools/llvm-mc/AsmParser.h
index 63bac59..5aefb5b 100644
--- a/tools/llvm-mc/AsmParser.h
+++ b/tools/llvm-mc/AsmParser.h
@@ -80,8 +80,7 @@
   virtual bool Error(SMLoc L, const Twine &Msg);
 
   bool ParseExpression(const MCExpr *&Res);
-  virtual bool ParseExpression(const MCExpr *&Res,
-                               SMLoc &StartLoc, SMLoc &EndLoc);
+  virtual bool ParseExpression(const MCExpr *&Res, SMLoc &EndLoc);
   virtual bool ParseParenExpression(const MCExpr *&Res, SMLoc &EndLoc);
   virtual bool ParseAbsoluteExpression(int64_t &Res);
 
