On Wed, 7 Mar 2012, Tristan Gingold wrote:

> On Mar 6, 2012, at 6:34 PM, Joseph S. Myers wrote:
> 
> > On Tue, 6 Mar 2012, Tristan Gingold wrote:
> > 
> >> The patch is simple: the C front-end will now calls c_build_pointer_type 
> >> (instead of build_pointer_type), which in turn calls 
> >> build_pointer_type_for_mode using the right mode.
> > 
> > There seem to be quite a lot of build_pointer_type calls in the C front 
> > end (and in c-common.c) that you haven't changed.  Could you explain the 
> > rule for when a call should or should not be changed, and how it applies 
> > to all these calls?
> 
> The global approach is to have the same effect as a default 
> __attribute__((mode(SI/DImode))) on pointers declared by users so that 
> layouts match.  That's why only grokdeclarator is changed.
> 
> There might be bugs with this approach (e.g. it looks like 
> c-common.c:handle_noreturn_attribute doesn't preserve the mode of the 
> pointer to function), but my understanding is that they also correspond 
> to bugs of __attribute__((mode ())) applied to pointer.  The later one 
> isn't well tested and one advantage of the VMS port is that it will test 
> it much more (as there are many pragma pointer_size in VMS headers).

So those places would need to change to use build_pointer_type_for_mode as 
is done for composite types in c-typeck.c:composite_type, for example?

I think the patch at least needs a (VMS-specific?) testcase that tests the 
new pragma (presuming the testsuite can be run for VMS targets) even if 
some cases can't be tested until they are fixed.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to