+ case '\t':
+ column = add_column_width (column, p0, p - p0);
+ column = add_column_width (column, NULL, 8 - ((column - 1) & 7));
+ p0 = p + 1;
+ break;
+
+ default:
+ break;
+ }
+
+ cur->line = line;
+ cur->column = column = add_column_width (column, p0, p - p0);
+
+ loc->end = *cur;
+
+ if (line == INT_MAX && loc->start.line != INT_MAX)
+ complain_at (*loc, Wother, _("line number overflow"));
+ if (column == INT_MAX && loc->start.column != INT_MAX)
+ complain_at (*loc, Wother, _("column number overflow"));
+}
+
+
+/* Output to OUT the location LOC.
+ Warning: it uses quotearg's slot 3. */
+unsigned
+location_print (FILE *out, location loc)
+{
+ unsigned res = 0;
+ int end_col = 0 != loc.end.column ? loc.end.column - 1 : 0;
+ res += fprintf (out, "%s",
+ quotearg_n_style (3, escape_quoting_style, loc.start.file));
+ if (0 <= loc.start.line)
+ {
+ res += fprintf(out, ":%d", loc.start.line);
+ if (0 <= loc.start.column)
+ res += fprintf (out, ".%d", loc.start.column);
+ }