Instantiate local class at the end of its definition

Richard Smith richard at metafoo.co.uk
Mon Sep 29 11:05:37 PDT 2014


On Tue, Sep 23, 2014 at 2:33 PM, Michael Park <mcypark at gmail.com> wrote:

> I tried adding *LocalInstantiationScope* around
> *PerformPendingInstantiation*, like so:
>
> // A static constexpr member function of a local class can be used in
>> // a constexpr expression right after the local class' definition.
>> // We need to instantiate them now, otherwise it may be too late.
>> LocalInstantiationScope Local(SemaRef);
>> SemaRef.PerformPendingInstantiations(/*LocalOnly=*/true);
>> Local.Exit();
>
>
> but it didn't seem to work. I'm not sure what I'm missing here. Could you
> give me a hint please?
>

This is the bit I was referring to:

  SavePendingLocalImplicitInstantiationsRAII
      SavedPendingLocalImplicitInstantiations(*this);
  std::unique_ptr<SavePendingInstantiationsAndVTableUsesRAII>
      SavePendingInstantiationsAndVTableUses;
  if (Recursive) {
    SavePendingInstantiationsAndVTableUses.reset(
        new SavePendingInstantiationsAndVTableUsesRAII(*this));
  }

[...]

  PerformPendingInstantiations(/*LocalOnly=*/true);
  Scope.Exit();

  if (Recursive) {
    // Define any pending vtables.
    DefineUsedVTables();

    // Instantiate any pending implicit instantiations found during the
    // instantiation of this template.
    PerformPendingInstantiations();

    // Restore PendingInstantiations and VTableUses.
    SavePendingInstantiationsAndVTableUses.reset();
  }



> Thanks
>
> On 25 August 2014 01:30, Richard Smith <richard at metafoo.co.uk> wrote:
>
>> It would be better to save and restore the pending local instantiations
>> around the calls to instantiate the class body and its members, as we do
>> elsewhere when we perform local pending instantiations.
>>
>>
>> On Fri, Aug 22, 2014 at 2:41 AM, Michael Park <mcypark at gmail.com> wrote:
>>
>>> Fixes http://llvm.org/bugs/show_bug.cgi?id=20625
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140929/6f377931/attachment.html>


More information about the cfe-commits mailing list