ODR merging and implicit typedefs
Eric Botcazou
ebotcazou@adacore.com
Fri May 22 09:31:00 GMT 2015
> I will take a look if I can improve type_in_anonymous_namepsace somehow. So
> Ada produces TYPE_DECL with DECL_ABSTRACT that do have TYPE_STUB_DECL with
> TREE_PUBLIC NULL I suppose.
Do you mean DECL_ARTIFICIAL instead of DECL_ABSTRACT? If so, presumably, yes,
why wouldn't it do that? That seems the natural description of an artificial
private type with file scope.
And I don't really understand why DECL_ARTIFICIAL is allowed to make such a
difference in semantics here. That looks dangerous to me.
Note that the problematic assertions:
gcc_assert (!type_with_linkage_p (t1) || !type_in_anonymous_namespace_p
(t1));
gcc_assert (!type_with_linkage_p (t2) || !type_in_anonymous_namespace_p
(t2));
make the following code unreachable:
if ((type_with_linkage_p (t1) && type_in_anonymous_namespace_p (t1))
|| (type_with_linkage_p (t2) && type_in_anonymous_namespace_p (t2)))
{
/* We can not trip this when comparing ODR types, only when trying to
match different ODR derivations from different declarations.
So WARN should be always false. */
gcc_assert (!warn);
return false;
}
--
Eric Botcazou
More information about the Gcc-patches
mailing list