Revert my previous patch to make the valgrind bots happy.
[oota-llvm.git] / lib / MC / MCStreamer.cpp
index 6df4ae44e40e2b5b3b3e69a8374936726fe9b5dd..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,6 +74,17 @@ void MCStreamer::EmitSLEB128IntValue(int64_t Value, unsigned AddrSpace) {
   EmitBytes(OSE.str(), AddrSpace);
 }
 
+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, AddrSpace);
+}
+
 void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
                                  unsigned AddrSpace) {
   EmitValue(MCSymbolRefExpr::Create(Sym, getContext()), Size, AddrSpace);