gcc-patches@gcc.gnu.org
[Top] [All Lists]

Re: [IFUNC] PATCH: Add an ifunc attribute

Subject: Re: [IFUNC] PATCH: Add an ifunc attribute
From: Mark Mitchell
Date: Thu, 02 Jul 2009 08:50:15 -0700
Paolo Bonzini wrote:

> Accept __attribute__ ((ifunc (int foo(int, long)) then.  And then do
> 
> typedef int foo_type (int, long);
> foo *bar (void) __attribute__ ((ifunc (foo_type foo)))

I don't object to something like this, or Jakub's "mangle" suggestion.
I agree with Jakub that if we can build something that is useful in more
contexts, that is a good thing.

I think that for C++, there are two reasonably natural ways to deal with
overloading.  The first is a full declaration, just as would be required
to declare the function.  This is what Paolo demonstrates above.  Of
course, in the case of templates, this might be complex.  For example:

  mangle(template <> void S<int>::f(double))

or some such.  The other would be to use the same rules that apply when
performing a cast.  For example:

  mangle((void (*)())f);

Here, the overloaded "f" can be resolved based on the cast-to type.  A
further extension that gets you the type of the top level declaration
being declared would be useful.  For example:

  void f(int) attribute((asm(mangle((typeof)g))));

The intent here is that we pick the "g" that matches the type of "f".

-- 
Mark Mitchell
CodeSourcery
mark@xxxxxxxxxxxxxxxx
(650) 331-3385 x713

<Prev in Thread] Current Thread [Next in Thread>