]> granicus.if.org Git - clang/commit
[SemaCXX] Param diagnostic matches overload logic
authorBrian Gesiak <modocache@gmail.com>
Fri, 1 Feb 2019 03:30:29 +0000 (03:30 +0000)
committerBrian Gesiak <modocache@gmail.com>
Fri, 1 Feb 2019 03:30:29 +0000 (03:30 +0000)
commit5e9410946b21b33b3a947a91d5da342a6a14b680
tree309591ea41ec907555945d4d8a7022ec648646c5
parent2e4e45ded61986282366cbeed4853efbdaa71e08
[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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@352831 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/SemaDecl.cpp
test/SemaCXX/function-redecl.cpp