On 05/06/2015 12:28 PM, Jason Merrill wrote:
On 05/05/2015 04:33 PM, Aldy Hernandez wrote:
On 05/05/2015 02:08 PM, Jason Merrill wrote:
On 05/04/2015 09:29 PM, Aldy Hernandez wrote:
The code handling parameter DIEs needed a little tweaking for variable
length template arguments. I've relaxed the original assert, but this
may require tweaking at branch review time-- hopefully later this week.
What testcase motivated this? We're within a formal_parameter_pack, but
Pretty much every other test in the libstdc++-v3 testsuite was failing
with the ICE I elided in my patch.
I wasn't able to narrow it down to a tiny test, but I can do so if you
want. ??
I think that would be helpful so we can decide what we want the debug
output to look like.
Jason
Removing the aforementioned patch from the branch with the attached
one-liner, you can reproduce on the following reduced testcase (-O -g
-quiet -std=gnu++14):
template < typename _Tp >
_Tp forward ()
{
};
template < typename blahblah >
class vector
{
public:
template < typename ... _Args > void emplace_back (_Args ...);
template < typename ... _Args > void _M_emplace_back_aux (_Args ...);
};
template < typename _Tp >
template < typename ... _Args >
void
vector <_Tp >::emplace_back (_Args ...)
{
_M_emplace_back_aux (forward < _Args > ...);
}
void
foobar ()
{
vector < int >myvecint;
myvecint.emplace_back (0, 0);
}
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 7502fbc..4f3b484 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -18006,6 +18006,7 @@ gen_formal_parameter_die (tree node, tree origin, bool
emit_name_p,
}
else
{
+ gcc_unreachable();
/* Reuse DIE even with a differing context.
This happens when called through