diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -921,10 +921,10 @@ EvalInfo(const ASTContext &C, Expr::EvalStatus &S, EvaluationMode Mode) : Ctx(const_cast(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), diff --git a/clang/test/Sema/eval-info.c b/clang/test/Sema/eval-info.c new file mode 100644 --- /dev/null +++ b/clang/test/Sema/eval-info.c @@ -0,0 +1,9 @@ +// 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;