diff --git a/gcc/testsuite/g++.dg/diagnostic/pr72803.C b/gcc/testsuite/g++.dg/diagnostic/pr72803.C
index ca522b74bad243241a41b428b3e0f6356a91b531..0a9a390b9c33d523d49777b31b1dfaf98299c3e3 100644
--- a/gcc/testsuite/g++.dg/diagnostic/pr72803.C
+++ b/gcc/testsuite/g++.dg/diagnostic/pr72803.C
@@ -5,6 +5,5 @@ class test {
 // The line directive appears to be necessary to trigger the ICE
 // { dg-error "style of line directive is a GCC extension" "" { target *-*-* } .-2 }
 
-/* Verify that we get the best line and column for the diagnostic.
-   512 is not representable in the line-maps created for this test.  */
-// { dg-error "511: expected .;. after class definition" "" { target *-*-* } 3 }
+/* Verify that we get the correct line and column for the diagnostic.  */
+// { dg-error "512: expected .;. after class definition" "" { target *-*-* } 3 }
diff --git a/gcc/testsuite/gcc.dg/pr100142.c b/gcc/testsuite/gcc.dg/pr100142.c
new file mode 100644
index 0000000000000000000000000000000000000000..aec146cb0a97a1d515e9178dd9ac8b479a096dcb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr100142.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-fpreprocessed" } */
+
+void
+foo (void)
+{
+  assert (1); /* { dg-warning "implicit" } */
+}
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index 2f5e44447d24e9cc3fd2f314d5825d0fa16ad028..a03d6760a8e62a787bece6059fe9d5d22a59d144 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -982,7 +982,7 @@ linemap_position_for_loc_and_offset (line_maps *set,
      the next line map of the set.  Otherwise, we try to encode the
      location in the next map.  */
   for (; map != LINEMAPS_LAST_ORDINARY_MAP (set)
-	 && (loc + (column << map->m_range_bits)
+	 && (loc + (column_offset << map->m_range_bits)
 	     >= MAP_START_LOCATION (map + 1)); map++)
     /* If the next map is a different file, or starts in a higher line, we
        cannot encode the location there.  */