[clang] [Clang][Sema] fix outline member function template with default align crash (PR #78400)
Qizhi Hu via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 19 11:15:00 PST 2024
https://github.com/jcsxky updated https://github.com/llvm/llvm-project/pull/78400
>From c3856543fd56ec33bab6bcdcd3d833c0e19f58f9 Mon Sep 17 00:00:00 2001
From: huqizhi <huqizhi at feysh.com>
Date: Wed, 17 Jan 2024 14:16:34 +0800
Subject: [PATCH] fix
---
clang/lib/Sema/SemaTemplateInstantiate.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index fc80515b45e35b4..262fe71545a2a61 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -3064,10 +3064,18 @@ bool Sema::SubstDefaultArgument(
if (addInstantiatedParametersToScope(FD, PatternFD, *LIS, TemplateArgs))
return true;
}
+ auto NewTemplateArgs = TemplateArgs;
+ if (FD->isOutOfLine()) {
+ auto *CurrentTemplateArgumentList = TemplateArgumentList::CreateCopy(
+ getASTContext(), TemplateArgs.getInnermost());
+ NewTemplateArgs = getTemplateInstantiationArgs(
+ FD, FD->getDeclContext(), true, CurrentTemplateArgumentList, true,
+ nullptr, false, false);
+ }
runWithSufficientStackSpace(Loc, [&] {
- Result = SubstInitializer(PatternExpr, TemplateArgs,
- /*DirectInit*/false);
+ Result = SubstInitializer(PatternExpr, NewTemplateArgs,
+ /*DirectInit*/ false);
});
}
if (Result.isInvalid())
More information about the cfe-commits
mailing list