zyn0217 wrote:
@jcsxky At the glance of the stacktrace, I suspect we probably need some
mechanism of deferral codegen while instantiating the enclosing struct. Can you
please file a separate issue?
https://github.com/llvm/llvm-project/pull/82310
___
jcsxky wrote:
> > Still crash on
> > ```c++
> > template constexpr auto x = F();
> > template constexpr int a() { return 1; }
> >
> > template
> > struct A {
> > using Func = decltype(
> > [](T) {
> > return x<[] constexpr { return a(); }>;
> > // return x<[] constexpr
zyn0217 wrote:
> Still crash on
>
> ```c++
> template constexpr auto x = F();
> template constexpr int a() { return 1; }
>
> template
> struct A {
> using Func = decltype(
> [](T) {
> return x<[] constexpr { return a(); }>;
> // return x<[] constexpr { return b(); }>;
jcsxky wrote:
Still crash on
```cpp
template constexpr auto x = F();
template constexpr int a() { return 1; }
template
struct A {
using Func = decltype(
[](T) {
return x<[] constexpr { return a(); }>;
// return x<[] constexpr { return b(); }>;
}.template
https://github.com/zyn0217 closed
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
zyn0217 wrote:
Thank you folks for the insightful review! I'm merging this PR now.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
https://github.com/zyn0217 edited
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
@@ -80,6 +80,81 @@ struct Response {
return R;
}
};
+
+// Retrieve the primary template for a lambda call operator. It's
+// unfortunate that we only have the mappings of call operators rather
+// than lambda classes.
+const FunctionDecl *
shafik wrote:
ping @cor3ntin
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
@@ -80,6 +80,81 @@ struct Response {
return R;
}
};
+
+// Retrieve the primary template for a lambda call operator. It's
+// unfortunate that we only have the mappings of call operators rather
+// than lambda classes.
+const FunctionDecl *
https://github.com/erichkeane edited
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
https://github.com/erichkeane commented:
1 thought, else I don't see anything. @cor3ntin is coming back in a few days,
so I'd like him to do a final once over.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
zyn0217 wrote:
Friendly ping @cor3ntin and @erichkeane if you're back in the offices.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
zyn0217 wrote:
> I think some `static_assert` statements are required to demonstrate it does
> deduce the type of template parameters correctly.
Added. Although the patch doesn't touch that type deduction part and thus they
are theoretically not affected.
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From 25f493da55e5cd7d46dda6fca6062aa56b6a3fd0 Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/7] The lambda call inside of a type alias
---
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From 25f493da55e5cd7d46dda6fca6062aa56b6a3fd0 Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/7] The lambda call inside of a type alias
---
jcsxky wrote:
Probably I haven't understand these code deeply and I have some confusions on
this patch. I wonder has this patch solved essential issue, or it just fixed
the crash. I think some `static_assert` statements are required to demonstrate
it does deduce the type of template
https://github.com/zyn0217 edited
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
zyn0217 wrote:
So, I have:
1. rebased the patch on top of the recent Sema refactors.
2. incorporated the fix for https://github.com/llvm/llvm-project/issues/82104,
which is a slight change on `HandleFunction`.
3. separated the `CodeSynthesisContext` iteration logic into three helper
functions
https://github.com/Endilll commented:
`Sema.h` changes look good to me.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From f340fb3dd66e436566d5a65da0a35d77a6a0bde6 Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/6] The lambda call inside of a type alias
---
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From f340fb3dd66e436566d5a65da0a35d77a6a0bde6 Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/5] The lambda call inside of a type alias
---
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From f340fb3dd66e436566d5a65da0a35d77a6a0bde6 Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/4] The lambda call inside of a type alias
---
@@ -13905,6 +13911,31 @@ TreeTransform::TransformLambdaExpr(LambdaExpr
*E) {
/*IsInstantiation*/ true);
SavedContext.pop();
+ // Recompute the dependency of the lambda so that we can defer the lambda
call
+ // construction until after
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -13905,6 +13911,31 @@ TreeTransform::TransformLambdaExpr(LambdaExpr
*E) {
/*IsInstantiation*/ true);
SavedContext.pop();
+ // Recompute the dependency of the lambda so that we can defer the lambda
call
+ // construction until after
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -614,6 +682,15 @@ Sema::InstantiatingTemplate::InstantiatingTemplate(
PointOfInstantiation, InstantiationRange, Param, Template,
TemplateArgs) {}
+Sema::InstantiatingTemplate::InstantiatingTemplate(
+Sema , SourceLocation PointOfInstantiation,
+
@@ -13905,6 +13911,31 @@ TreeTransform::TransformLambdaExpr(LambdaExpr
*E) {
/*IsInstantiation*/ true);
SavedContext.pop();
+ // Recompute the dependency of the lambda so that we can defer the lambda
call
+ // construction until after
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -13905,6 +13911,31 @@ TreeTransform::TransformLambdaExpr(LambdaExpr
*E) {
/*IsInstantiation*/ true);
SavedContext.pop();
+ // Recompute the dependency of the lambda so that we can defer the lambda
call
+ // construction until after
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -614,10 +614,14 @@ bool Sema::SetupConstraintScope(
// reference the original primary template.
// We walk up the instantiated template chain so that nested lambdas get
// handled properly.
-for (FunctionTemplateDecl *FromMemTempl =
-
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
@@ -313,9 +313,75 @@ Response HandleRecordDecl(const CXXRecordDecl *Rec,
// This is to make sure we pick up the VarTemplateSpecializationDecl that
this
// lambda is defined inside of.
- if (Rec->isLambda())
+ if (Rec->isLambda()) {
if (const Decl *LCD =
https://github.com/erichkeane commented:
I don't have any concerns, but want @cor3ntin to take a look. He's under the
weather at the moment, so he might be a few days.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
zyn0217 wrote:
Friendly ping. I'm looking for your feedback before fixing other similar bugs,
e.g. #82104.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
zyn0217 wrote:
Although this patch doesn't fix
https://github.com/llvm/llvm-project/issues/82104 yet, which is a crash caused
by a mismatch in the template argument during the return type deduction, I
still tried a temporary workaround (turning some switches off / on for
https://github.com/zyn0217 updated
https://github.com/llvm/llvm-project/pull/82310
>From 0f97fae5d1ba4debe04824e5d2d98598504d003d Mon Sep 17 00:00:00 2001
From: Younan Zhang
Date: Tue, 20 Feb 2024 14:54:14 +0800
Subject: [PATCH 1/3] The lambda call inside of a type alias
---
zyn0217 wrote:
Also added @shafik for some insights on tests / other existing issues.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
https://github.com/zyn0217 edited
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
llvmbot wrote:
@llvm/pr-subscribers-clang
Author: Younan Zhang (zyn0217)
Changes
This patch attempts to fix the lambda call expression inside of a type alias
declaration from two aspects:
1. Defer the lambda call expression building until after we have sufficient
template arguments.
https://github.com/zyn0217 ready_for_review
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
zyn0217 wrote:
Result for libc++ tests:
```
Failed Tests (1):
llvm-libc++-shared.cfg.in :: libcxx/headers_in_modulemap.sh.py
Testing Time: 1232.89s
Total Discovered Tests: 9673
Unsupported : 585 (6.05%)
Passed : 9062 (93.68%)
Expectedly Failed:
zyn0217 wrote:
The Windows CI is still broken and I have to run the libc++ tests locally.
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://github.com/zyn0217 edited
https://github.com/llvm/llvm-project/pull/82310
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
49 matches
Mail list logo