static void verify_unpacked_ranges (diagnostic_context *context, diagnostic_info *diagnostic) { /* Verify that the locations are ad-hoc, not packed. */ location_t loc = diagnostic_location (diagnostic); gcc_assert (IS_ADHOC_LOC (loc)); /* We're done testing; chain up to original finalizer. */ gcc_assert (original_finalizer); original_finalizer (context, diagnostic); }
static expanded_location expand_location_1 (source_location loc, bool expansion_point_p) { expanded_location xloc; const struct line_map *map; enum location_resolution_kind lrk = LRK_MACRO_EXPANSION_POINT; tree block = NULL; if (IS_ADHOC_LOC (loc)) { block = LOCATION_BLOCK (loc); loc = LOCATION_LOCUS (loc); } /* If LOC describes a location with a discriminator, extract the discriminator and map it to the real location. */ if (min_discriminator_location != UNKNOWN_LOCATION && loc >= min_discriminator_location && loc < next_discriminator_location) loc = map_discriminator_location (loc); memset (&xloc, 0, sizeof (xloc)); if (loc >= RESERVED_LOCATION_COUNT) { if (!expansion_point_p) { /* We want to resolve LOC to its spelling location. But if that spelling location is a reserved location that appears in the context of a macro expansion (like for a location for a built-in token), let's consider the first location (toward the expansion point) that is not reserved; that is, the first location that is in real source code. */ loc = linemap_unwind_to_first_non_reserved_loc (line_table, loc, &map); lrk = LRK_SPELLING_LOCATION; } loc = linemap_resolve_location (line_table, loc, lrk, &map); xloc = linemap_expand_location (line_table, map, loc); } xloc.data = block; if (loc <= BUILTINS_LOCATION) xloc.file = loc == UNKNOWN_LOCATION ? NULL : _("<built-in>"); return xloc; }