> On 03/30/2015 02:36 PM, Jan Hubicka wrote:
> >Will there be only one copy even on targets that do not support aliases?
>
> Yes, on those targets we use thunks.
I see, and only if thinks fails on variadic arguments we lose, right?
>
> >Still, it would be great if we can make context to be the
On 03/30/2015 02:36 PM, Jan Hubicka wrote:
Will there be only one copy even on targets that do not support aliases?
Yes, on those targets we use thunks.
Still, it would be great if we can make context to be the actual function.
That sounds messy.
Otherwise I will need to figure out some w
> On 03/30/2015 01:19 PM, Jan Hubicka wrote:
> >I think the problem is that C++ FE does not ask about copy_forbidden and
> >clone
> >ctor anyway?
>
> maybe_clone_body checks tree_versionable_function_p and doesn't
> clone if it's false.
>
> ...ok, now I've actually checked the testcase. In this
On 03/30/2015 01:19 PM, Jan Hubicka wrote:
I think the problem is that C++ FE does not ask about copy_forbidden and clone
ctor anyway?
maybe_clone_body checks tree_versionable_function_p and doesn't clone if
it's false.
...ok, now I've actually checked the testcase. In this case there is a
> On 03/30/2015 05:32 AM, Richard Biener wrote:
> >IMHO that's bogus. But I thought we decided that functions with
> >non-local labels shouldn't be cloned?
>
> Yes, why isn't copy_forbidden flagging this function? It has a
> check for exactly this situation.
I think the problem is that C++ FE d
On 03/30/2015 05:32 AM, Richard Biener wrote:
IMHO that's bogus. But I thought we decided that functions with
non-local labels shouldn't be cloned?
Yes, why isn't copy_forbidden flagging this function? It has a check
for exactly this situation.
And cloning static vars looks bogus
as well
On Mon, Mar 30, 2015 at 11:07 AM, Jan Hubicka wrote:
> Hi,
> unforutnately the patch ICE on:
> int i;
> struct C
> {
> C();
> };
>
> C::C()
> {
> static void *labelref = &&label;
> goto *labelref;
> label: i = 1;
> }
>
> int main()
> {
> C c;
> return (i != 1);
> }
>
> The problem is th
Hi,
unforutnately the patch ICE on:
int i;
struct C
{
C();
};
C::C()
{
static void *labelref = &&label;
goto *labelref;
label: i = 1;
}
int main()
{
C c;
return (i != 1);
}
The problem is that decl_function_context of labelref is not C::C
itself but an abstract function that is abst