[clang] [clang][Sema] Ignore the parentheses in the guard of DiagnoseUnexpandedParameterPack (PR #86401)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 23 09:11:11 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Younan Zhang (zyn0217)
<details>
<summary>Changes</summary>
This is a follow-up for https://github.com/llvm/llvm-project/pull/69224, where the previous fix failed to handle the parentheses around the expression.
Fixes https://github.com/llvm/llvm-project/issues/86361.
---
Full diff: https://github.com/llvm/llvm-project/pull/86401.diff
3 Files Affected:
- (modified) clang/docs/ReleaseNotes.rst (+2)
- (modified) clang/lib/Sema/SemaTemplateVariadic.cpp (+1-1)
- (modified) clang/test/SemaCXX/pr61460.cpp (+1)
``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 8054d90fc70f93..1bf7d7fcda2a4a 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -439,6 +439,8 @@ Bug Fixes to C++ Support
- Fix a crash when instantiating a lambda that captures ``this`` outside of its context. Fixes (#GH85343).
- Fix an issue where a namespace alias could be defined using a qualified name (all name components
following the first `::` were ignored).
+- A follow-up fix was added for (#GH61460), where the fix previously overlooked the parentheses
+ around the expression. (#GH86361)
Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp b/clang/lib/Sema/SemaTemplateVariadic.cpp
index 903fbfd18e779c..1c4a09bca4e3ff 100644
--- a/clang/lib/Sema/SemaTemplateVariadic.cpp
+++ b/clang/lib/Sema/SemaTemplateVariadic.cpp
@@ -415,7 +415,7 @@ bool Sema::DiagnoseUnexpandedParameterPack(Expr *E,
// FunctionParmPackExpr, but diagnosing unexpected parameter packs may still
// see such an expression in a lambda body.
// We'll bail out early in this case to avoid triggering an assertion.
- if (isa<FunctionParmPackExpr>(E) && getEnclosingLambda())
+ if (isa<FunctionParmPackExpr>(E->IgnoreParens()) && getEnclosingLambda())
return false;
SmallVector<UnexpandedParameterPack, 2> Unexpanded;
diff --git a/clang/test/SemaCXX/pr61460.cpp b/clang/test/SemaCXX/pr61460.cpp
index 471b1b39d23c2b..44a11c30b95b59 100644
--- a/clang/test/SemaCXX/pr61460.cpp
+++ b/clang/test/SemaCXX/pr61460.cpp
@@ -2,6 +2,7 @@
template <typename... Ts> void g(Ts... p1s) {
(void)[&](auto... p2s) { ([&] { p1s; p2s; }, ...); };
+ (void)[&](auto... p2s) { ([&] { (p1s); p2s; }, ...); };
}
void f1() {
``````````
</details>
https://github.com/llvm/llvm-project/pull/86401
More information about the cfe-commits
mailing list