Commit 03dc3f26 by David Malcolm

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.
parent 697251b7
2020-01-14 David Malcolm <dmalcolm@redhat.com>
* tree-diagnostic-path.cc (path_summary::event_range::print):
When testing for UNKNOWN_LOCATION, look through ad-hoc wrappers
using get_pure_location.
2020-01-15 Jakub Jelinek <jakub@redhat.com> 2020-01-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/93262 PR tree-optimization/93262
......
...@@ -172,7 +172,7 @@ class path_summary ...@@ -172,7 +172,7 @@ class path_summary
In particular the label for the event won't get printed. In particular the label for the event won't get printed.
Fail more gracefully in this case by showing the event Fail more gracefully in this case by showing the event
index and text, at no particular location. */ index and text, at no particular location. */
if (initial_loc <= BUILTINS_LOCATION) if (get_pure_location (initial_loc) <= BUILTINS_LOCATION)
{ {
for (unsigned i = m_start_idx; i <= m_end_idx; i++) for (unsigned i = m_start_idx; i <= m_end_idx; i++)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment