re PR c++/63849 ([c++11] ICE on variadic alias template with wrappers)
PR c++/63849 * mangle.c (decl_mangling_context): Use template_type_parameter_p. From-SVN: r217949
This commit is contained in:
parent
169fe7fa43
commit
6602e1095d
@ -1,5 +1,8 @@
|
||||
2014-11-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/63849
|
||||
* mangle.c (decl_mangling_context): Use template_type_parameter_p.
|
||||
|
||||
PR c++/63588
|
||||
* pt.c (uses_template_parms): Handle null argument.
|
||||
|
||||
|
@ -764,8 +764,7 @@ decl_mangling_context (tree decl)
|
||||
if (extra)
|
||||
return extra;
|
||||
}
|
||||
else if (TREE_CODE (decl) == TYPE_DECL
|
||||
&& TREE_CODE (TREE_TYPE (decl)) == TEMPLATE_TYPE_PARM)
|
||||
else if (template_type_parameter_p (decl))
|
||||
/* template type parms have no mangling context. */
|
||||
return NULL_TREE;
|
||||
return CP_DECL_CONTEXT (decl);
|
||||
|
43
gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
Normal file
43
gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
Normal file
@ -0,0 +1,43 @@
|
||||
// PR c++/63849
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template <class _T, class...>
|
||||
using First = _T; // we should not use this
|
||||
// alias with only
|
||||
// one pack parameter (?)
|
||||
|
||||
template <template <class...> class _Successor,
|
||||
int,
|
||||
class... _Xs>
|
||||
struct Overlay
|
||||
{
|
||||
using O = _Successor<_Xs...>;
|
||||
};
|
||||
|
||||
template <class... _Pack>
|
||||
struct List
|
||||
{
|
||||
template <int _s>
|
||||
using O = typename Overlay<List, _s, _Pack...>::O;
|
||||
|
||||
template <template <class...> class _S>
|
||||
using Pass = _S<_Pack...>;
|
||||
|
||||
template <int _i>
|
||||
using At = typename O<_i>
|
||||
::template Pass<First>;
|
||||
};
|
||||
|
||||
template <int _i>
|
||||
using At = typename List<int, char>
|
||||
::template At<_i>;
|
||||
|
||||
template <int _i>
|
||||
void func_crash(At<_i>&) {}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char ccc;
|
||||
int iii;
|
||||
func_crash<0>(iii);
|
||||
}
|
Loading…
Reference in New Issue
Block a user