[cfe-dev] Additional instantiations of anonymous enum inside a template

Richard Smith richard at metafoo.co.uk
Mon Oct 13 12:48:45 PDT 2014


On Mon, Oct 13, 2014 at 12:02 PM, András Kucsma <r0maikx02b at gmail.com>
wrote:

> Hi,
>
> I'm one of the developers of Metashell (
> https://github.com/sabel83/metashell), more specifically the developer of
> metadebugger, which was used to reproduce this issue.
>
> Metashell uses Templight (http://plc.inf.elte.hu/templight/) to gather
> information about the template instantiations.
>
> I put together a small test which reproduces the issue without Metashell,
> using only a clang patched with Templight:
> https://gist.github.com/r0mai/4d90fdc8007af96c2dd1
>

I don't see any Clang bug here. Templight is not reporting template
instantiations; you're misinterpreting its output. 129 of the 130 instances
are of kind "Memoization", which is Templight's way of saying "Clang
checked whether the type was complete". There are no additional
instantiations here.


> You can find the trace that Templight produced in the gist as well.
> Memoization events of ENUM appear 130 times while instantiating
> int_<fib<2>::value>.
>
> I CC-ed in two guys (Zoltán Porkoláb and Zoltán Borók-Nagy). They will be
> able to help with Templight related questions.
>
> Regards,
> András
>
> On Mon, Oct 13, 2014 at 6:02 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
>
>>
>> On 13 Oct 2014 01:06, "Pavel Morozkin" <pavel.morozkin at gmail.com> wrote:
>> >
>> > On 13 October 2014 03:53, Richard Smith <richard at metafoo.co.uk> wrote:
>> >>
>> >> On Sun, Oct 12, 2014 at 3:29 AM, Pavel Morozkin <
>> pavel.morozkin at gmail.com> wrote:
>> >>>
>> >>> Hello cfe-dev group,
>> >>>
>> >>> Consider this template metaprogram:
>> >>> template <unsigned N> struct fib { enum { value = fib<N-1>::value +
>> fib<N-2>::value}; };
>> >>> template <> struct fib<1> { enum { value = 1 }; };
>> >>> template <> struct fib<0> { enum { value = 0 }; };
>> >>>
>> >>> During compilation of 'fib<2>::value' (after finally getting memoized
>> result of instantiation of struct fib<0>) Clang «instantiates the anonymous
>> enum inside fib<0> and fib<1>» 129 times in sum.
>> >>
>> >>
>> >> That sounds like a bug. How are you observing it?
>> >
>> >
>> > I debugged the metaprogram with use of Metashell tool.
>>
>> Possibly this is a bug in metashell? How does it get this information?
>>
>> >>> In case, when we use 'constexpr static auto' instead of 'enum', no
>> additional instantiations occurs. Why Clang performs additional
>> instantiations in the first case?
>> >>>
>> >>> Thank you,
>> >>> Pavel
>> >>>
>> >>> _______________________________________________
>> >>> cfe-dev mailing list
>> >>> cfe-dev at cs.uiuc.edu
>> >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>> >>>
>> >>
>> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141013/6aa53036/attachment.html>


More information about the cfe-dev mailing list