HomePhabricator

[SemaCXX] Param diagnostic matches overload logic

Description

[SemaCXX] Param diagnostic matches overload logic

Summary:
Given the following test program:

class C {
public:
  int A(int a, int& b);
};

int C::A(const int a, int b) {
  return a * b;
}

Clang would produce an error message that correctly diagnosed the
redeclaration of C::A to not match the original declaration (the
parameters to the two declarations do not match -- the original takes an
int & as its 2nd parameter, but the redeclaration takes an int). However,
it also produced a note diagnostic that inaccurately pointed to the
first parameter, claiming that const int in the redeclaration did not
match the unqualified int in the original. The diagnostic is
misleading because it has nothing to do with why the program does not
compile.

The logic for checking for a function overload, in
Sema::FunctionParamTypesAreEqual, discards cv-qualifiers before
checking whether the types are equal. Do the same when producing the
overload diagnostic.

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: cpplearner, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D57032

Details

Committed
modocacheJan 31 2019, 7:30 PM
Reviewer
rsmith
Differential Revision
D57032: [SemaCXX] Param diagnostic matches overload logic
Parents
rL352830: Fix compilation of examples after 13680223b9d8 / r352827
Branches
Unknown
Tags
Unknown