PR c++/85552 - wrong instantiation of dtor for DMI.
The problem here is that when processing direct-initialization of a data member, we don't need to worry about destruction semantics; that will be handled in the [cd]tor. Conveniently, we already have tf_no_cleanup from a similar fix to new-expressions. * typeck2.c (digest_nsdmi_init): Set tf_no_cleanup for direct-init. From-SVN: r272287
This commit is contained in:
parent
e748435795
commit
8a26547b39
3 changed files with 39 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-06-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/85552 - wrong instantiation of dtor for DMI.
|
||||
* typeck2.c (digest_nsdmi_init): Set tf_no_cleanup for direct-init.
|
||||
|
||||
2019-06-13 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* decl.c (grokdeclarator): Use id_loc in five additional places
|
||||
|
|
|
@ -1309,7 +1309,10 @@ digest_nsdmi_init (tree decl, tree init, tsubst_flags_t complain)
|
|||
tree type = TREE_TYPE (decl);
|
||||
int flags = LOOKUP_IMPLICIT;
|
||||
if (DIRECT_LIST_INIT_P (init))
|
||||
flags = LOOKUP_NORMAL;
|
||||
{
|
||||
flags = LOOKUP_NORMAL;
|
||||
complain |= tf_no_cleanup;
|
||||
}
|
||||
if (BRACE_ENCLOSED_INITIALIZER_P (init)
|
||||
&& CP_AGGREGATE_TYPE_P (type))
|
||||
init = reshape_init (type, init, complain);
|
||||
|
|
30
gcc/testsuite/g++.dg/cpp0x/nsdmi-list5.C
Normal file
30
gcc/testsuite/g++.dg/cpp0x/nsdmi-list5.C
Normal file
|
@ -0,0 +1,30 @@
|
|||
// PR c++/85552
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template<typename T>
|
||||
struct uptr {
|
||||
uptr() { }
|
||||
uptr(void*) { }
|
||||
~uptr() { static_assert(sizeof(T), "complete type"); }
|
||||
};
|
||||
|
||||
class S;
|
||||
|
||||
class Compiles
|
||||
{
|
||||
uptr<S> s;
|
||||
};
|
||||
|
||||
class DoesntCompile
|
||||
{
|
||||
~DoesntCompile();
|
||||
DoesntCompile();
|
||||
|
||||
uptr<S> s1 { };
|
||||
uptr<S> s2 { nullptr };
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue