re PR c++/56614 (error: default argument 'std::vector<E>(std::initializer_list<E>{((const E*)(& ._0)), 1u}, (*(const std::allocator<E>*)(& std::allocator<E>())))' uses local variable '._0')
PR c++/56614 * decl.c (local_variable_p_walkfn): Check DECL_ARTIFICIAL again. From-SVN: r196662
This commit is contained in:
parent
c2bb4db4af
commit
a4c0821aa4
|
@ -1,3 +1,8 @@
|
|||
2013-03-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/56614
|
||||
* decl.c (local_variable_p_walkfn): Check DECL_ARTIFICIAL again.
|
||||
|
||||
2013-03-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/56403
|
||||
|
|
|
@ -10536,9 +10536,8 @@ static tree
|
|||
local_variable_p_walkfn (tree *tp, int *walk_subtrees,
|
||||
void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* Check DECL_NAME to avoid including temporaries. We don't check
|
||||
DECL_ARTIFICIAL because we do want to complain about 'this'. */
|
||||
if (local_variable_p (*tp) && DECL_NAME (*tp))
|
||||
if (local_variable_p (*tp)
|
||||
&& (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
|
||||
return *tp;
|
||||
else if (TYPE_P (*tp))
|
||||
*walk_subtrees = 0;
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
// PR c++/56614
|
||||
// { dg-require-effective-target c++11 }
|
||||
|
||||
#include <initializer_list>
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<typename T>
|
||||
struct allocator
|
||||
{ };
|
||||
|
||||
template<typename T, typename Alloc = std::allocator<T> >
|
||||
struct vector
|
||||
{
|
||||
vector(std::initializer_list<T>, const Alloc& = Alloc()) { }
|
||||
};
|
||||
}
|
||||
|
||||
void func() { }
|
||||
|
||||
enum E { ee };
|
||||
|
||||
struct C
|
||||
{
|
||||
template<typename T>
|
||||
C(T, std::vector<E> = std::vector<E>({ ee }))
|
||||
{ }
|
||||
};
|
||||
|
||||
struct G
|
||||
{
|
||||
void gen()
|
||||
{
|
||||
C c(&func);
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue