On 12/13/2016 12:49 PM, Nathan Sidwell wrote:
+/* Template information for an alias template type.  */
+#define TYPE_ALIAS_TEMPLATE_INFO(NODE)                                 \
+  (DECL_LANG_SPECIFIC (TYPE_NAME (NODE))                               \
+   ? DECL_TEMPLATE_INFO (TYPE_NAME (NODE))                             \
+   : NULL_TREE)
+
+/* If NODE is a specialization of an alias template, this accessor
+   returns the template info for the alias template.  Otherwise behave
+   as TYPE_TEMPLATE_INFO.  */
+#define TYPE_TEMPLATE_INFO_MAYBE_ALIAS(NODE)                           \
+  (TYPE_ALIAS_P (NODE) && DECL_LANG_SPECIFIC (TYPE_NAME (NODE))                
\
+   ? TYPE_ALIAS_TEMPLATE_INFO (NODE)                                   \
+   : TYPE_TEMPLATE_INFO (NODE))

Looks like this is checking DECL_LANG_SPECIFIC twice again; we should be able to drop the check from TYPE_TEMPLATE_INFO_MAYBE_ALIAS.

            /* An alias template name is never deduced.  */
            if (TYPE_ALIAS_P (arg))
              arg = strip_typedefs (arg);
-           tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
+
+           tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (arg);

You don't need _MAYBE_ALIAS here. And without it, we should be able to drop the strip_typedefs.

OK with those changes.

Jason

Reply via email to