cor3ntin added inline comments.
================ Comment at: clang/lib/Sema/SemaDeclCXX.cpp:1905 + if (SemaRef.LangOpts.CPlusPlus2b) { + if (!VD->getType()->isLiteralType(SemaRef.Context)) + SemaRef.Diag(VD->getLocation(), ---------------- hubert.reinterpretcast wrote: > This seems to trigger even when the type is dependent: > ``` > <stdin>:1:36: warning: definition of a variable of non-literal type in a > constexpr function is incompatible with C++ standards before C++2b > [-Wpre-c++2b-compat] > auto qq = [](auto x) { decltype(x) n; }; > ^ > 1 warning generated. > ``` > > This also seems to emit even when `Kind` is not > `Sema::CheckConstexprKind::Diagnose` (unlike the `static`/`thread_local` case > above). Is the `CheckLiteralType` logic not reusable for this? You are right, thanks for noticing that, it was rather bogus. The reason I'm not using CheckLiteralType is to avoid duplicating a diagnostics message, as CheckLiteralType doesn't allow us to pass parameter to the diagnostic message. It leaves us with an uncovered scenario though: We do not emit the warning on template instantiation, and I don't think there is an easy way to do that. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D122249/new/ https://reviews.llvm.org/D122249 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits