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

András Kucsma r0maikx02b at gmail.com
Mon Oct 13 12:02:29 PDT 2014


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

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/755cb133/attachment.html>


More information about the cfe-dev mailing list