Commit ded24904 authored by Yaxun (Sam) Liu's avatar Yaxun (Sam) Liu
Browse files

Workaround for EvalInfo ctor for MSVC 2017

Current EvalInfo ctor causes EnableNewConstInterp to be true even though
it is supposed to be false on MSVC 2017. This is because a virtual function
getLangOpts() is called in member initializer lists, whereas on MSVC
member ctors are called before function virtual function pointers are
initialized.

This patch fixes that.

Differential Revision: https://reviews.llvm.org/D70729
parent 350565db
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -921,10 +921,10 @@ namespace {
    EvalInfo(const ASTContext &C, Expr::EvalStatus &S, EvaluationMode Mode)
        : Ctx(const_cast<ASTContext &>(C)), EvalStatus(S), CurrentCall(nullptr),
          CallStackDepth(0), NextCallIndex(1),
          StepsLeft(getLangOpts().ConstexprStepLimit),
          ForceNewConstInterp(getLangOpts().ForceNewConstInterp),
          StepsLeft(C.getLangOpts().ConstexprStepLimit),
          ForceNewConstInterp(C.getLangOpts().ForceNewConstInterp),
          EnableNewConstInterp(ForceNewConstInterp ||
                               getLangOpts().EnableNewConstInterp),
                               C.getLangOpts().EnableNewConstInterp),
          BottomFrame(*this, SourceLocation(), nullptr, nullptr, nullptr),
          EvaluatingDecl((const ValueDecl *)nullptr),
          EvaluatingDeclValue(nullptr), HasActiveDiagnostic(false),
+9 −0
Original line number Diff line number Diff line
// RUN: %clang_cc1 %s -fsyntax-only -triple x86_64-unknown-windows-msvc -verify

// expected-no-diagnostics

// Make sure the new constant interpolator is not enabled unintentionally
// to cause assertion.
typedef enum x {
  a = 1,
} x;