diff --git a/clang/include/clang/Sema/DeclSpec.h b/clang/include/clang/Sema/DeclSpec.h index 5c549d76aaf1..b417f89c0e5b 100644 --- a/clang/include/clang/Sema/DeclSpec.h +++ b/clang/include/clang/Sema/DeclSpec.h @@ -363,7 +363,7 @@ private: unsigned Friend_specified : 1; // constexpr-specifier - ConstexprSpecKind ConstexprSpecifier : 2; + unsigned ConstexprSpecifier : 2; union { UnionParsedType TypeRep; @@ -728,7 +728,10 @@ public: bool isModulePrivateSpecified() const { return ModulePrivateLoc.isValid(); } SourceLocation getModulePrivateSpecLoc() const { return ModulePrivateLoc; } - ConstexprSpecKind getConstexprSpecifier() const { return ConstexprSpecifier; } + ConstexprSpecKind getConstexprSpecifier() const { + return ConstexprSpecKind(ConstexprSpecifier); + } + SourceLocation getConstexprSpecLoc() const { return ConstexprLoc; } bool hasConstexprSpecifier() const { return ConstexprSpecifier != CSK_unspecified; diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp index 21d7f6bd426c..9433efb18194 100644 --- a/clang/lib/Sema/DeclSpec.cpp +++ b/clang/lib/Sema/DeclSpec.cpp @@ -1037,9 +1037,9 @@ bool DeclSpec::setModulePrivateSpec(SourceLocation Loc, const char *&PrevSpec, bool DeclSpec::SetConstexprSpec(ConstexprSpecKind ConstexprKind, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) { - if (ConstexprSpecifier != CSK_unspecified) { - if (ConstexprSpecifier == CSK_consteval || ConstexprKind == CSK_consteval) - return BadSpecifier(ConstexprKind, ConstexprSpecifier, PrevSpec, DiagID); + if (getConstexprSpecifier() != CSK_unspecified) { + if (getConstexprSpecifier() == CSK_consteval || ConstexprKind == CSK_consteval) + return BadSpecifier(ConstexprKind, getConstexprSpecifier(), PrevSpec, DiagID); DiagID = diag::warn_duplicate_declspec; PrevSpec = "constexpr"; return true;