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: 32 <= loc < 64
  file: test.c
  starting at line: 1
  column bits: 12
  range bits: 5
test.c:  1|loc:   32|#include "test.h"
                    |69269258258148147
                    |46802468024680246

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

ORDINARY MAP: 2
  source_location interval: 96 <= loc < 128
  file: <command-line>
  starting at line: 0
  column bits: 0
  range bits: 0

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

ORDINARY MAP: 4
  source_location interval: 160128 <= loc < 160160
  file: <command-line>
  starting at line: 32
  column bits: 12
  range bits: 5

ORDINARY MAP: 5
  source_location interval: 160160 <= loc < 164256
  file: test.c
  starting at line: 1
  column bits: 12
  range bits: 5
test.c:  1|loc:160160|#include "test.h"
                    |00000000000000000
                    |12223334445556667
                    |92582581481470470
                    |24680246802468024

ORDINARY MAP: 6
  source_location interval: 164256 <= loc < 173280
  file: test.h
  starting at line: 1
  column bits: 12
  range bits: 5
test.h:  1|loc:164256|extern int foo ();
                    |444444444444444444
                    |233344455566677788
                    |825814814704703603
                    |802468024680246802
test.h:  2|loc:168352|
                    |
                    |
                    |
                    |
test.h:  3|loc:172448|#define PLUS(A, B) A + B
                    |222222222222222223333333
                    |455566677788889990001112
                    |814704703603692692582581
                    |024680246802468024680246

ORDINARY MAP: 7
  source_location interval: 173280 <= loc < 202016
  file: test.c
  starting at line: 2
  column bits: 12
  range bits: 5
test.c:  2|loc:173280|
                    |
                    |
                    |
                    |
test.c:  3|loc:177376|int
                    |777
                    |444
                    |047
                    |802
test.c:  4|loc:181472|main (int argc, char **argv)
                    |1111111111111111222222222222
                    |5556666777888999000111222333
                    |0360369269258258148147047036
                    |4680246802468024680246802468
test.c:  5|loc:185568|{
                    |5
                    |6
                    |0
                    |0
test.c:  6|loc:189664|  int a = PLUS (1,2);
                    |999999999900000000000
                    |677788899900011122233
                    |926925825814814704703
                    |680246802468024680246
test.c:  7|loc:193760|  int b = PLUS (3,4);
                    |333333344444444444444
                    |788899900011122233344
                    |925825814814704703603
                    |246802468024680246802
test.c:  8|loc:197856|  return 0;
                    |77778888888
                    |89990001112
                    |82581481470
                    |80246802468
test.c:  9|loc:201952|}
                    |1
                    |9
                    |8
                    |4

UNALLOCATED LOCATIONS
  source_location interval: 202016 <= loc < 2147483633

MACRO 1: PLUS (7 tokens)
  source_location interval: 2147483633 <= loc < 2147483640
test.c:7:11: note: expansion point is location 194115
   int b = PLUS (3,4);
           ^~~~

  map->start_location: 2147483633
  macro_locations:
    0: 194304, 173088
test.c:7:17: note: token 0 has x-location == 194304
   int b = PLUS (3,4);
                 ^

test.c:7:17: note: token 0 has y-location == 173088
    1: 173152, 173152
In file included from test.c:1:0:
test.h:3:22: note: token 1 has x-location == y-location == 173152
 #define PLUS(A, B) A + B
                      ^

    2: 194368, 173216
test.c:7:19: note: token 2 has x-location == 194368
   int b = PLUS (3,4);
                   ^

test.c:7:19: note: token 2 has y-location == 173216
    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 190019
   int a = PLUS (1,2);
           ^~~~

  map->start_location: 2147483640
  macro_locations:
    0: 190208, 173088
test.c:6:17: note: token 0 has x-location == 190208
   int a = PLUS (1,2);
                 ^

test.c:6:17: note: token 0 has y-location == 173088
    1: 173152, 173152
In file included from test.c:1:0:
test.h:3:22: note: token 1 has x-location == y-location == 173152
 #define PLUS(A, B) A + B
                      ^

    2: 190272, 173216
test.c:6:19: note: token 2 has x-location == 190272
   int a = PLUS (1,2);
                   ^

test.c:6:19: note: token 2 has y-location == 173216
    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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
