aboutsummaryrefslogtreecommitdiff
path: root/libcpp/line-map.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2011-10-17 09:59:40 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2011-10-17 11:59:40 +0200
commit847e697a240e6d30335335c62084743978fa2084 (patch)
tree1df29dda9c3f6fb6e559fa82140695ea5b6130d1 /libcpp/line-map.c
parent07a0b324eb7e353146340f00db380c6d92851fc9 (diff)
downloadgcc-847e697a240e6d30335335c62084743978fa2084.zip
gcc-847e697a240e6d30335335c62084743978fa2084.tar.gz
gcc-847e697a240e6d30335335c62084743978fa2084.tar.bz2
Support -fdebug-cpp option
This patch adds -fdebug-cpp option. When used with -E this dumps the relevant macro map before every single token. This clutters the output a lot but has proved to be invaluable in tracking some bugs during the development of the virtual location support. Co-Authored-By: Dodji Seketeli <dodji@redhat.com> From-SVN: r180084
Diffstat (limited to 'libcpp/line-map.c')
-rw-r--r--libcpp/line-map.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index fe07c16..3dbaeab 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -1105,3 +1105,41 @@ linemap_expand_location_full (struct line_maps *set,
xloc = linemap_expand_location (map, loc);
return xloc;
}
+
+/* Dump debugging information about source location LOC into the file
+ stream STREAM. SET is the line map set LOC comes from. */
+
+void
+linemap_dump_location (struct line_maps *set,
+ source_location loc,
+ FILE *stream)
+{
+ const struct line_map *map;
+ source_location location;
+ const char *path, *from;
+ int l,c,s,e;
+
+ if (loc == 0)
+ return;
+
+ location =
+ linemap_resolve_location (set, loc, LRK_MACRO_DEFINITION_LOCATION, &map);
+ path = LINEMAP_FILE (map);
+
+ l = SOURCE_LINE (map, location);
+ c = SOURCE_COLUMN (map, location);
+ s = LINEMAP_SYSP (map) != 0;
+ e = location != loc;
+
+ if (e)
+ from = "N/A";
+ else
+ from = (INCLUDED_FROM (set, map))
+ ? LINEMAP_FILE (INCLUDED_FROM (set, map))
+ : "<NULL>";
+
+ /* P: path, L: line, C: column, S: in-system-header, M: map address,
+ E: macro expansion?. */
+ fprintf (stream, "{P:%s;F:%s;L:%d;C:%d;S:%d;M:%p;E:%d,LOC:%d}",
+ path, from, l, c, s, (void*)map, e, loc);
+}