On Sep 25, 2015, at 1:11 PM, David Malcolm <dmalc...@redhat.com> wrote:
> +layout::layout (diagnostic_context * context,
>> +            const diagnostic_info *diagnostic)
>> 
>> [...]
>> 
>> +      if (loc_range->m_finish.file != m_exploc.file)
>> +    continue;
>> +      if (loc_range->m_show_caret_p)
>> +    if (loc_range->m_finish.file != m_exploc.file)
>> +      continue;
>> 
>> I think the second if clause is redundant.
> 
> Good catch; thanks.

And one other nit.  You don’t validate that the range finishes on or after the 
start.  Later in the code, you require this to be the case:

bool
layout_range::contains_point (int row, int column) const
{
  gcc_assert (m_start.m_line <= m_finish.m_line);

this code cannot tolerate a range with that property.  So, either, such a range 
should never be generated, or, if it is to be generated, at least we should 
declare it awkward.  The below patch declares it to be awkward.  Without this, 
we ice on completely sane and normal code:

  #define max(i, j) sel((j), (i), (i) < (j))
  yu = max(a2, a3);

giving a valid warning.  In the code, we start on the last line, and finish on 
the first line.  The underlying problem is that we don’t track macro contexts 
properly.  sel is a compiler built-in, so, it might be funnier that just a 
normal function call.  This is from a trunk compiler from 20151201.

So, I was wondering if the problem has been fixed, or, if we should put the 
below in now, or, would you prefer to try and do up the changes to better track 
macro expansions?




diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c
index 9e51b95..bea8423 100644
--- a/gcc/diagnostic-show-locus.c
+++ b/gcc/diagnostic-show-locus.c
@@ -455,6 +455,9 @@ layout::layout (diagnostic_context * context,
       if (loc_range->m_show_caret_p)
        if (loc_range->m_caret.file != m_exploc.file)
          continue;
+      /* A range that finishes before it starts is awkward.  */
+      if (loc_range->m_start.line > loc_range->m_finish.line)
+       continue;
 
       /* Passed all the tests; add the range to m_layout_ranges so that
         it will be printed.  */

Reply via email to