[clang] [Clang] Implement C++26’s P2893R3 ‘Variadic friends’ (PR #101448)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 6 09:18:29 PDT 2024
================
@@ -487,7 +487,26 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) {
}
this->Indent();
- Visit(*D);
+
+ // Group friend declarations if need be.
+ if (isa<FriendDecl>(*D)) {
+ auto *FD = cast<FriendDecl>(*D);
+ VisitFriendDecl(FD);
+ SourceLocation FriendLoc = FD->getFriendLoc();
+
+ // Use a separate iterator; 'D' is always one declaration 'behind' in
+ // this loop; the last friend printed here (or the first printed just
+ // now before this loop if there are no subsequent friends) will be
+ // skipped by the '++D' of the outer loop.
+ for (DeclContext::decl_iterator It; It = std::next(D), It != DEnd; ++D) {
+ auto *NextFriend = dyn_cast<FriendDecl>(*It);
+ if (!NextFriend || NextFriend->getFriendLoc() != FriendLoc)
+ break;
+ VisitFriendDecl(NextFriend, false);
+ }
+ } else {
+ Visit(*D);
+ }
----------------
cor3ntin wrote:
Oh, I see. I misread that
We don't seem to try to be clever for using declarations, i think we should not here either.
https://github.com/llvm/llvm-project/pull/101448
More information about the cfe-commits
mailing list