1Consider compiling test.c, with this content: 2VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 3#include "test.h" 4 5int 6main (int argc, char **argv) 7{ 8 int a = PLUS (1,2); 9 int b = PLUS (3,4); 10 return 0; 11} 12^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 13 14...where test.h has this content: 15VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 16extern int foo (); 17 18#define PLUS(A, B) A + B 19^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 20 21 22The undocumented -fdump-internal-locations option outputs this information 23to stderr, showing what each location_t value means. Source code 24lines are quoted, showing both per-line location_t values and 25per-line&column location_t values (written vertically under the 26corresponding character of source code). 27 28VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 29RESERVED LOCATIONS 30 location_t interval: 0 <= loc < 2 31 32ORDINARY MAP: 0 33 location_t interval: 32 <= loc < 64 34 file: test.c 35 starting at line: 1 36 column and range bits: 12 37 column bits: 7 38 range bits: 5 39 reason: 0 (LC_ENTER) 40 included from location: 0 41test.c: 1|loc: 32|#include "test.h" 42 |69269258258148147 43 |46802468024680246 44 45ORDINARY MAP: 1 46 location_t interval: 64 <= loc < 96 47 file: <built-in> 48 starting at line: 0 49 column and range bits: 0 50 column bits: 0 51 range bits: 0 52 reason: 2 (LC_RENAME) 53 included from location: 0 54 55ORDINARY MAP: 2 56 location_t interval: 96 <= loc < 128 57 file: <command-line> 58 starting at line: 0 59 column and range bits: 0 60 column bits: 0 61 range bits: 0 62 reason: 2 (LC_RENAME) 63 included from location: 0 64 65ORDINARY MAP: 3 66 location_t interval: 128 <= loc < 250240 67 file: /usr/include/stdc-predef.h 68 starting at line: 1 69 column and range bits: 12 70 column bits: 7 71 range bits: 5 72 reason: 0 (LC_ENTER) 73 included from location: 127 (in ordinary map 2) 74(contents of /usr/include/stdc-predef.h snipped for brevity) 75 76ORDINARY MAP: 4 77 location_t interval: 250240 <= loc < 250272 78 file: <command-line> 79 starting at line: 32 80 column and range bits: 12 81 column bits: 7 82 range bits: 5 83 reason: 1 (LC_LEAVE) 84 included from location: 0 85 86ORDINARY MAP: 5 87 location_t interval: 250272 <= loc < 254368 88 file: test.c 89 starting at line: 1 90 column and range bits: 12 91 column bits: 7 92 range bits: 5 93 reason: 2 (LC_RENAME) 94 included from location: 0 95test.c: 1|loc:250272|#include "test.h" 96 |00000000000000000 97 |33344445556667778 98 |03603692692582581 99 |46802468024680246 100 101ORDINARY MAP: 6 102 location_t interval: 254368 <= loc < 266720 103 file: test.h 104 starting at line: 1 105 column and range bits: 12 106 column bits: 7 107 range bits: 5 108 reason: 0 (LC_ENTER) 109 included from location: 250272 (in ordinary map 5) 110test.h: 1|loc:254368|extern int foo (); 111 |444444444444444444 112 |444455566677788899 113 |036926925825814814 114 |024680246802468024 115test.h: 2|loc:258464| 116 | 117 | 118 | 119 | 120test.h: 3|loc:262560|#define PLUS(A, B) A + B 121 |222222222222233333333333 122 |566677788899900011122223 123 |925825814814704703603692 124 |246802468024680246802468 125test.h: 4|loc:266656| 126 | 127 | 128 | 129 | 130 131ORDINARY MAP: 7 132 location_t interval: 266720 <= loc < 299520 133 file: test.c 134 starting at line: 2 135 column and range bits: 12 136 column bits: 7 137 range bits: 5 138 reason: 1 (LC_LEAVE) 139 included from location: 0 140test.c: 2|loc:266720| 141 | 142 | 143 | 144 | 145test.c: 3|loc:270816|int 146 |000 147 |889 148 |481 149 |802 150test.c: 4|loc:274912|main (int argc, char **argv) 151 |4455555555555555555555555555 152 |9900011122223334445556667778 153 |4704703603692692582581481470 154 |4680246802468024680246802468 155test.c: 5|loc:279008|{ 156 |9 157 |0 158 |4 159 |0 160test.c: 6|loc:283104| int a = PLUS (1,2); 161 |333333333333333333333 162 |112222333444555666777 163 |360369269258258148147 164 |680246802468024680246 165test.c: 7|loc:287200| int b = PLUS (3,4); 166 |777777777777777777777 167 |222333444555666777888 168 |369269258258148147047 169 |246802468024680246802 170test.c: 8|loc:291296| return 0; 171 |11111111111 172 |33344455566 173 |26925825814 174 |80246802468 175test.c: 9|loc:295392|} 176 |5 177 |4 178 |2 179 |4 180test.c: 10|loc:299488| 181 | 182 | 183 | 184 | 185 186UNALLOCATED LOCATIONS 187 location_t interval: 299520 <= loc < 2147483632 188 189MACRO 3: PLUS (7 tokens) 190 location_t interval: 2147483632 <= loc < 2147483639 191test.c:7:11: note: expansion point is location 287555 192 7 | int b = PLUS (3,4); 193 | ^~~~ 194 map->start_location: 2147483632 195 macro_locations: 196 0: 287744, 263200 197test.c:7:17: note: token 0 has x-location == 287744 198 7 | int b = PLUS (3,4); 199 | ^ 200test.c:7:17: note: token 0 has y-location == 263200 201 1: 263264, 263264 202In file included from test.c:1: 203test.h:3:22: note: token 1 has x-location == y-location == 263264 204 3 | #define PLUS(A, B) A + B 205 | ^ 206 2: 287808, 263328 207test.c:7:19: note: token 2 has x-location == 287808 208 7 | int b = PLUS (3,4); 209 | ^ 210test.c:7:19: note: token 2 has y-location == 263328 211 3: 0, 0 212cc1: note: token 3 has x-location == y-location == 0 213 4: 0, 0 214cc1: note: token 4 has x-location == y-location == 0 215 5: 0, 0 216cc1: note: token 5 has x-location == y-location == 0 217 6: 0, 0 218cc1: note: token 6 has x-location == y-location == 0 219 220MACRO 2: PLUS (7 tokens) 221 location_t interval: 2147483639 <= loc < 2147483646 222test.c:6:11: note: expansion point is location 283459 223 6 | int a = PLUS (1,2); 224 | ^~~~ 225 map->start_location: 2147483639 226 macro_locations: 227 0: 283648, 263200 228test.c:6:17: note: token 0 has x-location == 283648 229 6 | int a = PLUS (1,2); 230 | ^ 231test.c:6:17: note: token 0 has y-location == 263200 232 1: 263264, 263264 233In file included from test.c:1: 234test.h:3:22: note: token 1 has x-location == y-location == 263264 235 3 | #define PLUS(A, B) A + B 236 | ^ 237 2: 283712, 263328 238test.c:6:19: note: token 2 has x-location == 283712 239 6 | int a = PLUS (1,2); 240 | ^ 241test.c:6:19: note: token 2 has y-location == 263328 242 3: 0, 0 243cc1: note: token 3 has x-location == y-location == 0 244 4: 0, 0 245cc1: note: token 4 has x-location == y-location == 0 246 5: 0, 0 247cc1: note: token 5 has x-location == y-location == 0 248 6: 0, 0 249cc1: note: token 6 has x-location == y-location == 0 250 251MACRO 1: __GCC_IEC_559_COMPLEX (1 tokens) 252 location_t interval: 2147483646 <= loc < 2147483647 253In file included from <command-line>:31: 254/usr/include/stdc-predef.h:45:6: note: expansion point is location 180564 255 45 | # if __GCC_IEC_559_COMPLEX > 0 256 | ^~~~~~~~~~~~~~~~~~~~~ 257 map->start_location: 2147483646 258 macro_locations: 259 0: 1, 1 260<built-in>: note: token 0 has x-location == y-location == 1 261 262MACRO 0: __GCC_IEC_559 (1 tokens) 263 location_t interval: 2147483647 <= loc < 2147483648 264/usr/include/stdc-predef.h:37:6: note: expansion point is location 147788 265 37 | # if __GCC_IEC_559 > 0 266 | ^~~~~~~~~~~~~ 267 map->start_location: 2147483647 268 macro_locations: 269 0: 1, 1 270<built-in>: note: token 0 has x-location == y-location == 1 271 272MAX_LOCATION_T 273 location_t interval: 2147483647 <= loc < 2147483648 274 275AD-HOC LOCATIONS 276 location_t interval: 2147483648 <= loc < 4294967295 277^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 278