Consider compiling test.c, with this content:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
#include "test.h"

int
main (int argc, char **argv)
{
  int a = PLUS (1,2);
  int b = PLUS (3,4);
  return 0;
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

...where test.h has this content:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
extern int foo ();

#define PLUS(A, B) A + B
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


The undocumented -fdump-internal-locations option outputs this information
to stderr, showing what each source_location value means.  Source code
lines are quoted, showing both per-line source_location values and
per-line&column source_location values (written vertically under the
corresponding character of source code).

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
RESERVED LOCATIONS
  source_location interval: 0 <= loc < 2

ORDINARY MAP: 0
  source_location interval: 2 <= loc < 3
  file: test.c
  starting at line: 1
  column bits: 7
test.c:  1|loc:    2|#include "test.h"
                    |00000001111111111
                    |34567890123456789

ORDINARY MAP: 1
  source_location interval: 3 <= loc < 4
  file: <built-in>
  starting at line: 0
  column bits: 0

ORDINARY MAP: 2
  source_location interval: 4 <= loc < 5
  file: <command-line>
  starting at line: 0
  column bits: 0

ORDINARY MAP: 3
  source_location interval: 5 <= loc < 5005
  file: /usr/include/stdc-predef.h
  starting at line: 1
  column bits: 7
(contents of /usr/include/stdc-predef.h snipped for brevity)

ORDINARY MAP: 4
  source_location interval: 5005 <= loc < 5006
  file: <command-line>
  starting at line: 1
  column bits: 7

ORDINARY MAP: 5
  source_location interval: 5006 <= loc < 5134
  file: test.c
  starting at line: 1
  column bits: 7
test.c:  1|loc: 5006|#include "test.h"
                    |55555555555555555
                    |00000000000000000
                    |00011111111112222
                    |78901234567890123

ORDINARY MAP: 6
  source_location interval: 5134 <= loc < 5416
  file: test.h
  starting at line: 1
  column bits: 7
test.h:  1|loc: 5134|extern int foo ();
                    |555555555555555555
                    |111111111111111111
                    |333334444444444555
                    |567890123456789012
test.h:  2|loc: 5262|
                    |
                    |
                    |
                    |
test.h:  3|loc: 5390|#define PLUS(A, B) A + B
                    |555555555555555555555555
                    |333333333444444444444444
                    |999999999000000000011111
                    |123456789012345678901234

ORDINARY MAP: 7
  source_location interval: 5416 <= loc < 6314
  file: test.c
  starting at line: 2
  column bits: 7
test.c:  2|loc: 5416|
                    |
                    |
                    |
                    |
test.c:  3|loc: 5544|int
                    |555
                    |555
                    |444
                    |567
test.c:  4|loc: 5672|main (int argc, char **argv)
                    |5555555555555555555555555555
                    |6666666666666666666666666667
                    |7777777888888888899999999990
                    |3456789012345678901234567890
test.c:  5|loc: 5800|{
                    |5
                    |8
                    |0
                    |1
test.c:  6|loc: 5928|  int a = PLUS (1,2);
                    |555555555555555555555
                    |999999999999999999999
                    |233333333334444444444
                    |901234567890123456789
test.c:  7|loc: 6056|  int b = PLUS (3,4);
                    |666666666666666666666
                    |000000000000000000000
                    |555666666666677777777
                    |789012345678901234567
test.c:  8|loc: 6184|  return 0;
                    |66666666666
                    |11111111111
                    |88888999999
                    |56789012345
test.c:  9|loc: 6312|}
                    |6
                    |3
                    |1
                    |3

UNALLOCATED LOCATIONS
  source_location interval: 6314 <= loc < 2147483633

MACRO 1: PLUS (7 tokens)
  source_location interval: 2147483633 <= loc < 2147483640
test.c:7:11: note: expansion point is location 6067
   int b = PLUS (3,4);
           ^
  map->start_location: 2147483633
  macro_locations:
    0: 6073, 5410
test.c:7:17: note: token 0 has x-location == 6073
   int b = PLUS (3,4);
                 ^
test.c:7:17: note: token 0 has y-location == 5410
    1: 5412, 5412
In file included from test.c:1:0:
test.h:3:22: note: token 1 has x-location == y-location == 5412
 #define PLUS(A, B) A + B
                      ^
    2: 6075, 5414
test.c:7:19: note: token 2 has x-location == 6075
   int b = PLUS (3,4);
                   ^
test.c:7:19: note: token 2 has y-location == 5414
    3: 0, 2947526575
cc1: note: token 3 has x-location == 0
cc1: note: token 3 has y-location == 2947526575
    4: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042942
    5: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042942
    6: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042942

MACRO 0: PLUS (7 tokens)
  source_location interval: 2147483640 <= loc < 2147483647
test.c:6:11: note: expansion point is location 5939
   int a = PLUS (1,2);
           ^
  map->start_location: 2147483640
  macro_locations:
    0: 5945, 5410
test.c:6:17: note: token 0 has x-location == 5945
   int a = PLUS (1,2);
                 ^
test.c:6:17: note: token 0 has y-location == 5410
    1: 5412, 5412
In file included from test.c:1:0:
test.h:3:22: note: token 1 has x-location == y-location == 5412
 #define PLUS(A, B) A + B
                      ^
    2: 5947, 5414
test.c:6:19: note: token 2 has x-location == 5947
   int a = PLUS (1,2);
                   ^
test.c:6:19: note: token 2 has y-location == 5414
    3: 0, 2947526575
cc1: note: token 3 has x-location == 0
cc1: note: token 3 has y-location == 2947526575
    4: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042935
    5: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042935
    6: 2947526575, 2947526575
x-location == y-location == 2947526575 encodes token # 800042935

MAX_SOURCE_LOCATION
  source_location interval: 2147483647 <= loc < 2147483648

AD-HOC LOCATIONS
  source_location interval: 2147483648 <= loc < 4294967295
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
