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.
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);
--- /dev/null
+// 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);
+}