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:
Jason Merrill 2017-03-19 22:22:43 -04:00 committed by Jason Merrill
parent c881690892
commit a4dfaae105
3 changed files with 30 additions and 3 deletions

View File

@ -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.

View File

@ -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);
}

View File

@ -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());
}