c++: *this capture in const member fn [PR95193].
Here, the capture proxy for *this is const, but its DECL_VALUE_EXPR is not. Don't ICE on this; it's a reasonable difference, since in C++ an rvalue of scalar type does not have cv-qualifiers. gcc/cp/ChangeLog: PR c++/95193 * pt.c (tsubst_decl): Relax assert. gcc/testsuite/ChangeLog: PR c++/95193 * g++.dg/cpp1z/lambda-this7.C: New test.
This commit is contained in:
parent
4013baf99c
commit
4b68cb38dd
@ -14633,7 +14633,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
|
||||
&& DECL_BIT_FIELD_TYPE (TREE_OPERAND (ve, 1)) == type)
|
||||
type = TREE_TYPE (ve);
|
||||
else
|
||||
gcc_checking_assert (TREE_TYPE (ve) == type);
|
||||
gcc_checking_assert (TYPE_MAIN_VARIANT (TREE_TYPE (ve))
|
||||
== TYPE_MAIN_VARIANT (type));
|
||||
SET_DECL_VALUE_EXPR (r, ve);
|
||||
}
|
||||
if (CP_DECL_THREAD_LOCAL_P (r)
|
||||
|
11
gcc/testsuite/g++.dg/cpp1z/lambda-this7.C
Normal file
11
gcc/testsuite/g++.dg/cpp1z/lambda-this7.C
Normal file
@ -0,0 +1,11 @@
|
||||
// PR c++/95193
|
||||
// { dg-do compile { target c++17 } }
|
||||
|
||||
struct X {
|
||||
void foo() const {
|
||||
auto GL1 = [*this](auto a) {
|
||||
};
|
||||
|
||||
GL1("abc");
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user