https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87364

--- Comment #2 from Will Wray <wjwray at gmail dot com> ---
Created attachment 44735
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44735&action=edit
Test for enumerator id pretty print patch

pp_enum_test
  auto_name<auto...> returns std::array<char>, splitting the
                     non-type arg 'names' from __PRETTY_FUNCTION__

  AUTO_NAME(v...) is a macro to display test input and output nicely

Given these enum definitions:

/******************************************/
enum e { a, b, c=b };                      // Unscoped global
enum class E : char { a, b, c=b };         // Scoped global
struct U { enum e { a, b, c=b }; };        // Unscoped member
struct S { enum class E { a, b, c=b }; };  // Scoped member
namespace N { enum { a, b, c=b }; }        // Namespace anon

int main()
{
    enum m { a, b, c=b };                  // Unscoped local
    enum class M { a, b, c=b };            // Scoped local
    struct K { enum e { a, b, c=b }; };    // Unscoped local member
    struct L { enum class E {a, b, c=b};}; // Scoped local member 
/******************************************/

The test output before the patch (all cast expressions):
================================

auto_name <::a, ::b, ::c, e(3)>
        -> (e)0, (e)1, (e)1, (e)3

auto_name <E::a, E::b, E::c, E{3}>
        -> (E)0, (E)1, (E)1, (E)3

auto_name <U::a, U::b, U::c, U::e(3)>
        -> (U::e)0, (U::e)1, (U::e)1, (U::e)3

auto_name <S::E::a, S::E::b, S::E::c, S::E(3)>
        -> (S::E)0, (S::E)1, (S::E)1, (S::E)3

auto_name <N::a, N::b, N::c, decltype(N::a)(3)>
        -> (N::._85)0, (N::._85)1, (N::._85)1, (N::._85)3

auto_name <a, b, c, m(3)>
        -> (main::m)0, (main::m)1, (main::m)1, (main::m)3

auto_name <M::a, M::b, M::c, M(3)>
        -> (main::M)0, (main::M)1, (main::M)1, (main::M)3

auto_name <K::a, K::b, K::c, K::e(3)>
        -> (main::K::e)0, (main::K::e)1, (main::K::e)1, (main::K::e)3

auto_name <L::E::a, L::E::b, L::E::c, L::E(3)>
        -> (main::L::E)0, (main::L::E)1, (main::L::E)1, (main::L::E)3


The test output after the patch:
===============================
auto_name <::a, ::b, ::c, e(3)>
        -> a, b, b, (e)3

auto_name <E::a, E::b, E::c, E{3}>
        -> E::a, E::b, E::b, (E)3

auto_name <U::a, U::b, U::c, U::e(3)>
        -> U::a, U::b, U::b, (U::e)3

auto_name <S::E::a, S::E::b, S::E::c, S::E(3)>
        -> S::E::a, S::E::b, S::E::b, (S::E)3

auto_name <N::a, N::b, N::c, decltype(N::a)(3)>
        -> N::a, N::b, N::b, (N::._85)3

auto_name <a, b, c, m(3)>
        -> main::a, main::b, main::b, (main::m)3

auto_name <M::a, M::b, M::c, M(3)>
        -> main::M::a, main::M::b, main::M::b, (main::M)3

auto_name <K::a, K::b, K::c, K::e(3)>
        -> main::K::a, main::K::b, main::K::b, (main::K::e)3

auto_name <L::E::a, L::E::b, L::E::c, L::E(3)>
        -> main::L::E::a, main::L::E::b, main::L::E::b, (main::L::E)3

Reply via email to