================
@@ -18,6 +18,21 @@ using namespace clang::interp;
State::~State() {}
+bool State::shouldRelaxDiag(const SourceLocation &Loc, diag::kind DiagId) {
+ if (!Ctx.getLangOpts().MSVCCompat)
----------------
eleviant wrote:
I'm not quite sure about that. I think we still want to relax constant
expression evaluation even if we don't actually want to emit a warning after
the evaluation has finished. In particular, this happens when we call
`CheckTemplateArgument`, which in turn calls
`BuildConvertedConstantExpression`. If we change the condition this way, the
template argument in the statement below will no longer be considered a
constant expression:
```
template<bool B>
struct TplBool {};
// template argument is not constant if we change condition in shouldRelaxDiag
TplBool<FIELD_OFFSET(S, y)> tc;
```
Strangely, this causes the code above to compile successfully instead of
producing the following error:
```
a.cpp:16:9: error: non-type template argument evaluates to 4, which cannot be
narrowed to type 'bool' [-Wc++11-narrowing]
```
https://github.com/llvm/llvm-project/pull/197005
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits