Revert my previous patch to make the valgrind bots happy.
[oota-llvm.git] / lib / MC / MCStreamer.cpp
index b9d59056f3b6c2e7e42e072850febfcc51a4b2bd..e003a953adec380a823c5c90acffdec0ba7fab65 100644 (file)
@@ -7,6 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCStreamer.h"
 #include "llvm/MC/MCExpr.h"
@@ -46,7 +47,8 @@ void MCStreamer::EmitDwarfSetLineAddr(int64_t LineDelta,
 /// pass in a MCExpr for constant integers.
 void MCStreamer::EmitIntValue(uint64_t Value, unsigned Size,
                               unsigned AddrSpace) {
-  assert(Size <= 8);
+  assert(Size <= 8 && "Invalid size");
+  assert(!(Size == 1 && (signed)Value > 255) && "Invalid size");
   char buf[8];
   // FIXME: Endianness assumption.
   for (unsigned i = 0; i != Size; ++i)
@@ -72,10 +74,15 @@ void MCStreamer::EmitSLEB128IntValue(int64_t Value, unsigned AddrSpace) {
   EmitBytes(OSE.str(), AddrSpace);
 }
 
-void MCStreamer::EmitAbsValue(const MCExpr *Value, unsigned Size) {
+void MCStreamer::EmitAbsValue(const MCExpr *Value, unsigned Size,
+                              unsigned AddrSpace) {
+  if (!getContext().getAsmInfo().needsSetToChangeDiffSize()) {
+    EmitValue(Value, Size, AddrSpace);
+    return;
+  }
   MCSymbol *ABS = getContext().CreateTempSymbol();
   EmitAssignment(ABS, Value);
-  EmitSymbolValue(ABS, Size, 0);
+  EmitSymbolValue(ABS, Size, AddrSpace);
 }
 
 void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size,