tree-diagnostic-path.cc: properly handle ad-hoc wrappers of UNKNOWN_LOCATION
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 20 Dec 2019 16:20:44 +0000 (11:20 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 15 Jan 2020 01:42:04 +0000 (20:42 -0500)
commit03dc3f26231cbf5733330028e14706f8ad77fd5a
tree3d8be721ba491de74f1c3c0c5a2ca5f94c5df899
parent697251b7a1bb7c14d3805de22248e83a23b90d1a
tree-diagnostic-path.cc: properly handle ad-hoc wrappers of UNKNOWN_LOCATION

In the reproducer for PR analyzer/58237 I noticed that some events that
were missing locations were also missing text; for example event 3 here:

    |   15 |   while (fgets(buf, 10, fp) != NULL)
    |      |         ~
    |      |         |
    |      |         (2) following 'false' branch...
    |
  'f1': event 3
    |
    |cc1:
    |

The root cause is that the path_summary-printing code doesn't consider
ad-hoc locations when looking for reserved locations, and so fails to
detect an unknown location for the case where an unknown location has
been wrapped into an ad-hoc location to record a block.

This patch fixes the issue by using get_pure_location, thus looking
through ad-hoc wrappers, improving the result to:

    |   15 |   while (fgets(buf, 10, fp) != NULL)
    |      |         ~
    |      |         |
    |      |         (2) following 'false' branch...
    |
  'f1': event 3
    |
    |cc1:
    | (3): ...to here
    |

gcc/ChangeLog:
* tree-diagnostic-path.cc (path_summary::event_range::print):
When testing for UNKNOWN_LOCATION, look through ad-hoc wrappers
using get_pure_location.
gcc/ChangeLog
gcc/tree-diagnostic-path.cc