https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61990

            Bug ID: 61990
           Summary: Incorrect caret location for type mismatches in
                    function calls
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dmalcolm at redhat dot com

Given the following test.cc:
-------------------------------------------------------
class foo {};

class bar {};

extern void some_fn (foo *, foo *, bar *, foo *, foo *);

void test(foo *f)
{
  some_fn (f, f, f, f, f);
}
-------------------------------------------------------
GCC trunk as of 2014-05-29 r211061 reports:
/tmp/test.cc:9:25: error: cannot convert ‘foo*’ to ‘bar*’ for argument ‘3’ to
‘void some_fn(foo*, foo*, bar*, foo*, foo*)’
   some_fn (f, f, f, f, f);
                         ^
It manages to report the arg num, but the caret is in the wrong place, on the
end paren; the caret should indicate the location of the bogus arg instead:
   some_fn (f, f, f, f, f);
                  ^
(Ideally, the whole of the bogus subexpression should be underlined, though I
appreciate that's a more involved fix architecturally).

Reply via email to