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 | Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to the dmalcolm/analyzer branch on the GCC git mirror. 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/tree-diagnostic-path.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/tree-diagnostic-path.cc b/gcc/tree-diagnostic-path.cc index 243f05a5fb14..32dc054519b7 100644 --- a/gcc/tree-diagnostic-path.cc +++ b/gcc/tree-diagnostic-path.cc @@ -172,7 +172,7 @@ class path_summary In particular the label for the event won't get printed. Fail more gracefully in this case by showing the event 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++) { -- 2.21.0