may_alias attribute and type identity (PR c++/34935)

Mark Mitchell mark@codesourcery.com
Thu Feb 7 00:11:00 GMT 2008


Doug Gregor wrote:
> PR c++/34935 illustrates a problem with the way attributes interact
> with type identity. The example in question looks something like this:
> 
>   typedef int X __attribute((may_alias));
> 
>   void foo(X);
>   void foo(int);

> Note that this is pretty tied up with Mark Mitchell's discussion of
> semantic and non-semantic attributes, here:
> 
>   http://gcc.gnu.org/ml/gcc/2006-10/msg00318.html

The may_alias attribute is a semantic attribute as it is specifically 
designed to affect code-generation.

Using the message you mention, this means that "X" is distinct from 
"int" -- which is what Richard and Jakub indicate as well, based on what 
the middle-end does.

Also, that message says:

> It is invalid to do anything that would require either type_info or a mangled name for "Q", including using it as an argument to typeid, thowing an exception of a type involving "Q", or declaring a template to take a parameter of a type involving "Q".

So, that means that you can't have any C++ functions with external 
linkage involving "X".  Of course, as that message says:

> We could relax some of these restrictions in future, if we add mangling support for attributes.

But, yes, if we need to mangle these types, we need to have a mangling 
for attributes.

-- 
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713



More information about the Gcc mailing list