return boolean_false_node;
}
-/* Get the linkage name for T, or NULL_TREE, if N/A. */
+/* Get the linkage name for T, or NULL_TREE for types with no name
+ or for typedefs. */
static tree
-type_linkage_name (tree t)
+reflection_type_linkage_name (tree t)
{
- if (TYPE_NAME (t) == NULL_TREE
- || !DECL_P (TYPE_NAME (t))
- || (!DECL_IMPLICIT_TYPEDEF_P (TYPE_NAME (t))
- && TYPE_NAME (t) == TYPE_NAME (TYPE_MAIN_VARIANT (t))
- && !TYPE_MAIN_DECL (t)))
- return NULL_TREE;
-
- return TYPE_NAME (t);
+ if (OVERLOAD_TYPE_P (t) && !typedef_variant_p (t))
+ return TYPE_NAME (t);
+ return NULL_TREE;
}
/* Process std::meta::has_internal_linkage.
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}