Be more careful in parsing Module::ModFlagBehavior value
[oota-llvm.git] / lib / ProfileData / CoverageMappingWriter.cpp
index f9bbe61fb48569f999ede7e067cea36e5029a6dc..15d3cd3d48d0d2a086fad4754fdb854a36ab346c 100644 (file)
@@ -103,7 +103,8 @@ static unsigned countFileIDs(ArrayRef<CounterMappingRegion> Regions,
 ///     A counter with kind Counter::Expression and an expression
 ///     with kind CounterExpression::Add
 /// Remaining bits - Counter/Expression ID.
-unsigned encodeCounter(ArrayRef<CounterExpression> Expressions, Counter C) {
+static unsigned encodeCounter(ArrayRef<CounterExpression> Expressions,
+                              Counter C) {
   unsigned Tag = unsigned(C.getKind());
   if (C.isExpression())
     Tag += Expressions[C.getExpressionID()].Kind;
@@ -181,7 +182,11 @@ void CoverageMappingWriter::write(raw_ostream &OS) {
     }
     assert(I.LineStart >= PrevLineStart);
     encodeULEB128(I.LineStart - PrevLineStart, OS);
-    encodeULEB128(I.ColumnStart, OS);
+    uint64_t CodeBeforeColumnStart =
+        uint64_t(I.HasCodeBefore) |
+        (uint64_t(I.ColumnStart)
+         << CounterMappingRegion::EncodingHasCodeBeforeBits);
+    encodeULEB128(CodeBeforeColumnStart, OS);
     assert(I.LineEnd >= I.LineStart);
     encodeULEB128(I.LineEnd - I.LineStart, OS);
     encodeULEB128(I.ColumnEnd, OS);