Skip to content
  • Brian Gesiak's avatar
    [SemaCXX] Param diagnostic matches overload logic · 3aba9fd6
    Brian Gesiak authored
    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
    
    llvm-svn: 352831
    3aba9fd6
Loading