Produce direct calls instead of alias to linkonce_odr functions

Reid Kleckner rnk at
Mon Nov 4 16:41:54 PST 2013

On Mon, Nov 4, 2013 at 2:48 PM, Rafael EspĂ­ndola <rafael.espindola at
> wrote:

> On 4 November 2013 14:37, Reid Kleckner <rnk at> wrote:
> > How do you deal with the case where not all references to the aliased
> entity
> > have been generated yet?  For example:
> >
> > Emit call to derived ctor
> > Emit derived ctor
> > RAUW derived ctor with base ctor
> > Emit call to derived ctor, create new declaration for it
> >
> > I attempted this before, and this is the issue I hit.
> This only happens for inline destructors (they are the ones that are
> linkonce_odr) and they are only output once at the end of the file via
> EmitDeferred. Were you trying to avoid aliases in more cases maybe?

Why doesn't this apply to inline constructors?  They are linkonce_odr.

EmitDeferred has a fixpoint loop, though, so it could cause more calls to
the replaced alias to be emitted.

I feel like this needs some defense against some other part of CodeGen
mangling the name for the entity you are replacing and attempting to
GetOrCreate it from the module.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the cfe-commits mailing list