PR c++/80084 - wrong C++17 decomposition by reference of parameter.
* decl.c (cp_finish_decomp): Don't pull out the DECL_INITIAL of a reference decomposition. From-SVN: r246273
This commit is contained in:
parent
c881690892
commit
a4dfaae105
|
@ -1,5 +1,9 @@
|
|||
2017-03-19 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/80084 - wrong C++17 decomposition by reference of parameter.
|
||||
* decl.c (cp_finish_decomp): Don't pull out the DECL_INITIAL of a
|
||||
reference decomposition.
|
||||
|
||||
PR c++/80077 - error with constexpr and -fno-elide-constructors.
|
||||
* constexpr.c (cxx_eval_call_expression): Set ctx->call while
|
||||
expanding trivial constructor.
|
||||
|
|
|
@ -7439,9 +7439,6 @@ cp_finish_decomp (tree decl, tree first, unsigned int count)
|
|||
|
||||
if (TREE_CODE (type) == REFERENCE_TYPE)
|
||||
{
|
||||
/* If e is a constant reference, use the referent directly. */
|
||||
if (DECL_INITIAL (decl))
|
||||
dexp = DECL_INITIAL (decl);
|
||||
dexp = convert_from_reference (dexp);
|
||||
type = TREE_TYPE (type);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
// PR c++/80084
|
||||
// { dg-options -std=c++1z }
|
||||
// { dg-do run }
|
||||
|
||||
struct A
|
||||
{
|
||||
A() { }
|
||||
A(const A&) { }
|
||||
};
|
||||
|
||||
struct B
|
||||
{
|
||||
A a;
|
||||
};
|
||||
|
||||
void f(B b)
|
||||
{
|
||||
auto& [a] = b;
|
||||
if (&a != &b.a)
|
||||
__builtin_abort();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
f(B());
|
||||
}
|
Loading…
Reference in New Issue