On Wed, Jul 1, 2015 at 10:43 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Jul 01, 2015 at 01:35:16PM -0400, Vladimir Makarov wrote: >> Actually it raise a question for me. If we describe that a function >> clobbers more than calling convention and then use it as a value (assigning >> a variable or passing as an argument) and loosing a track of it and than >> call it. How can RA know what the call clobbers actually. So for the >> function with the attributes we should prohibit use it as a value or make >> the attributes as a part of the function type, or at least say it is unsafe. >> So now I see this as a *bigger problem* with this extension. Although I >> guess it already exists as we have description of different ABI as an >> extension. > > Unfortunately target attribute is function decl attribute rather than > function type. And having more attributes affect switchable targets will be > non-fun.
Just to make sure we're on the same page here, if I write: extern void normal_func(void); void weird_func(void) __attribute__((used_regs("r12"))) { // do something normal_func(); // do something } I'd want the code that calls normal_func() to be understand that normal_func() *will* preserve r12 despite the fact that weird_func is allowed to clobber r12. I think this means that the attribute would have to be an attribute of a function, not of the RA while compiling the function. --Andy