hokein added inline comments.
================ Comment at: clang/lib/Sema/SemaOverload.cpp:12779 +// Guess at what the return type for an unresolvable overload should be. +static QualType chooseRecoveryType(OverloadCandidateSet &CS, ---------------- I steal this function from D61722. ================ Comment at: clang/test/SemaCXX/enable_if.cpp:417 -constexpr int B = 10 + // the carat for the error should be pointing to the problematic call (on the next line), not here. - callTemplated<0>(); // expected-error{{initialized by a constant expression}} expected-error@-3{{no matching function for call to 'templated'}} expected-note{{in instantiation of function template}} expected-note@-10{{candidate disabled}} +constexpr int B = 10 + // expected-error {{initialized by a constant expression}} + callTemplated<0>(); // expected-error@-3{{no matching function for call to 'templated'}} expected-note{{in instantiation of function template}} expected-note@-10{{candidate disabled}} expected-note {{in call to 'callTemplated()'}} expected-note@-3 {{subexpression not valid in a constant expression}} ---------------- this diagnostic is changed slightly (without `-frecovery-ast-type`). I think this is acceptable. before this patch: ``` /tmp/t5.cpp:7:10: error: no matching function for call to 'templated' return templated<N>(); // expected-error {{no matching function for call to 'templated'}} ^~~~~~~~~~~~ /tmp/t5.cpp:13:5: note: in instantiation of function template specialization 'enable_if_diags::callTemplated<0>' requested here callTemplated<0>(); // expected-note {{in call to 'callTemplated()'}} expected-note@-6 {{subexpression not valid in a constant expression}} ^ /tmp/t5.cpp:2:32: note: candidate disabled: <no message provided> template <int N> constexpr int templated() __attribute__((enable_if(N, ""))) { ^ ~ /tmp/t5.cpp:13:5: error: constexpr variable 'B' must be initialized by a constant expression callTemplated<0>(); // expected-note {{in call to 'callTemplated()'}} expected-note@-6 {{subexpression not valid in a constant expression}} ^~~~~~~~~~~~~~~~~~ 2 errors generated. ``` vs after this patch: ``` /tmp/t5.cpp:7:10: error: no matching function for call to 'templated' return templated<N>(); // expected-error {{no matching function for call to 'templated'}} ^~~~~~~~~~~~ /tmp/t5.cpp:13:5: note: in instantiation of function template specialization 'enable_if_diags::callTemplated<0>' requested here callTemplated<0>(); // expected-note {{in call to 'callTemplated()'}} expected-note@-6 {{subexpression not valid in a constant expression}} ^ /tmp/t5.cpp:2:32: note: candidate disabled: <no message provided> template <int N> constexpr int templated() __attribute__((enable_if(N, ""))) { ^ ~ /tmp/t5.cpp:12:15: error: constexpr variable 'B' must be initialized by a constant expression constexpr int B = 10 + // expected-error {{constexpr variable 'B' must be initialized by a constant expression}} ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/t5.cpp:7:10: note: subexpression not valid in a constant expression return templated<N>(); // expected-error {{no matching function for call to 'templated'}} ^ /tmp/t5.cpp:13:5: note: in call to 'callTemplated()' callTemplated<0>(); // expected-note {{in call to 'callTemplated()'}} expected-note@-6 {{subexpression not valid in a constant expression}} ^ 2 errors generated. ``` ================ Comment at: clang/test/SemaTemplate/instantiate-function-params.cpp:1 // RUN: %clang_cc1 -triple i686-unknown-unknown -fsyntax-only -verify %s ---------------- this test is very tricky, and hard for human to understand. It was added to test clang not crashing. Different compilers (gcc, msvc) emit different diagnostics, with this patch, clang emits 3 more errs `no type named 'type'...`, it seems reasonable, and gcc also emits them. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79160/new/ https://reviews.llvm.org/D79160 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits