ba4ad400f1
gcc/ChangeLog: * common.opt (fdump-internal-locations): New option. * input.c: Include diagnostic-core.h. (get_end_location): New function. (write_digit): New function. (write_digit_row): New function. (dump_location_range): New function. (dump_labelled_location_range): New function. (dump_location_info): New function. * input.h (dump_location_info): New prototype. * toplev.c (compile_file): Handle flag_dump_locations. libcpp/ChangeLog: * include/line-map.h (source_location): Add a reference to location-example.txt to the descriptive comment. * location-example.txt: New file. From-SVN: r223163
217 lines
6.6 KiB
Plaintext
217 lines
6.6 KiB
Plaintext
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
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|