[clang] [C++26] [Contracts] Initial parser support (PR #221139)
Chuanqi Xu via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 7 02:11:33 PDT 2026
================
@@ -2591,21 +2592,30 @@ bool Parser::ParseCXXMemberDeclaratorBeforeInitializer(
BitfieldSize = ParseConstantExpression();
if (BitfieldSize.isInvalid())
SkipUntil(tok::comma, StopAtSemi | StopBeforeMatch);
- } else if (Tok.is(tok::kw_requires)) {
- TemplateParameterDepthRAII CurTemplateDepthTracker(TemplateParameterDepth);
- // With abbreviated function templates - we need to explicitly add depth to
- // account for the implicit template parameter list induced by the template.
- if (DeclaratorInfo.getTemplateParameterLists().empty() &&
- DeclaratorInfo.getInventedTemplateParameterList())
- ++CurTemplateDepthTracker;
- ParseTrailingRequiresClauseWithScope(DeclaratorInfo);
} else {
- ParseOptionalCXX11VirtSpecifierSeq(
- VS, getCurrentClass().IsInterface,
- DeclaratorInfo.getDeclSpec().getFriendSpecLoc());
- if (!VS.isUnset())
- MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(DeclaratorInfo,
- VS);
+ // Requires clause can't follow 'override' but contracts can follow
+ // 'override'. Even if we don't support virtual functions with contractcs,
----------------
ChuanqiXu9 wrote:
Done
https://github.com/llvm/llvm-project/pull/221139
More information about the cfe-commits
mailing list