+/* Verify that IMPL_LOC is within EXPECTED_FILE at EXPECTED_LINE,
+ from EXPECTED_FUNCTION, using LOC for the location of any failure,
+ provided that the build compiler is sufficiently recent. */
+
+static void
+assert_impl_location_eq (const location &loc ATTRIBUTE_UNUSED,
+ const dump_impl_location_t &impl_loc ATTRIBUTE_UNUSED,
+ const char *expected_file ATTRIBUTE_UNUSED,
+ int expected_line ATTRIBUTE_UNUSED,
+ const char *expected_function ATTRIBUTE_UNUSED)
+{
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+ ASSERT_STR_CONTAINS_AT (loc, impl_loc.m_file, expected_file);
+ ASSERT_EQ_AT (loc, impl_loc.m_line, expected_line);
+ ASSERT_STR_CONTAINS_AT (loc, impl_loc.m_function, expected_function);
+#endif
+}
+
+/* Verify that IMPL_LOC is within EXPECTED_FILE at EXPECTED_LINE,
+ from EXPECTED_FUNCTION, provided that the build compiler is
+ sufficiently recent. */
+
+#define ASSERT_IMPL_LOCATION_EQ(IMPL_LOC, EXPECTED_FILE, EXPECTED_LINE, \
+ EXPECTED_FUNCTION) \
+ SELFTEST_BEGIN_STMT \
+ assert_impl_location_eq (SELFTEST_LOCATION, IMPL_LOC, \
+ EXPECTED_FILE, EXPECTED_LINE, \
+ EXPECTED_FUNCTION); \
+ SELFTEST_END_STMT
+