Here are 2 versions of the same test case:

cregex_2.cpp.big - output of creduce (aeb8b294)
cregex_2.cpp - manually reduced

Unfortuantely its reproduction will require special build of compiler; however 
I assume it could be useful on its own.
When doing manual reduction, I've removed all members of a[] except of first, 
removed classes, A, B, and C, removed unused template parameters of other 
classes including H, and then re-run creduce again.

-- 
Regards,
Konstantin
class A ;
template < class  = A > class B;
template < class _Allocator> class B {
public:
    typedef _Allocator allocator_type;
};
template <class charT> class C;
template <class charT, class  = C<charT> > struct K;
template <class charT, class  = K<charT> > class D;
typedef D<char, K<char> > regex;
template <class charT> class C {
public:
    typedef charT char_type;
};
template <class , class implementationT > struct K :  implementationT {            };
typedef enum  {              match_default       }
match_flags;
template <class , class  > class D  {
public:
    int& get_traits()    ;
};
template < class  =  B<>::allocator_type > class F;
template < class Allocator> class F {
public:
    typedef Allocator allocator_type;
};
class G {
public:
    G(G** )    ;
};
template <class BidiIterator, class Allocator, class traits> class H {
public:
    typedef typename traits::char_type char_type;
    typedef H self_type;
    typedef bool (self_type::*matcher_proc_type)();
    H(BidiIterator , BidiIterator ,       F< Allocator>& p3,        D<char_type, traits>& p4,       match_flags ,       BidiIterator )       : m_result(p3), re(p4), traits_inst(p4.get_traits()), rep_obj(0)    {              }              bool find();
    bool match_startmark();
    bool match_endmark();
    bool match_literal();
    bool match_start_line();
    bool match_end_line();
    bool match_wild();
    bool match_match();
    bool match_word_boundary();
    bool match_within_word();
    bool match_word_start();
    bool match_word_end();
    bool match_buffer_start();
    bool match_buffer_end();
    bool match_backref();
    bool match_long_set();
    bool match_set();
    bool match_jump();
    bool match_alt();
    bool match_rep();
    bool match_combining();
    bool match_soft_buffer_end();
    bool match_restart_continue();
    bool match_long_set_repeat();
    bool match_set_repeat();
    bool match_char_repeat();
    bool match_dot_repeat_dispatch()    ;
    bool match_backstep();
    bool match_assert_backref();
    bool match_toggle_case();
    bool match_recursion();
    F< Allocator>& m_result;
    D<char_type, traits>& re;
    int& traits_inst;
    G rep_obj;
};
class I;
class J {
    I* pdata;
    unsigned  GrepFiles(  );
};
class I {
public:
    regex e;
};
match_flags c;
template <class BidiIterator, class Allocator, class traits>  bool H<BidiIterator, Allocator, traits>::find() {
    matcher_proc_type  a[] =    {                        (&H::match_startmark),       &H::match_endmark,       &H::match_literal,       &H::match_start_line,       &H::match_end_line,       &H::match_wild,       &H::match_match,       &H::match_word_boundary,       &H::match_within_word,       &H::match_word_start,       &H::match_word_end,       &H::match_buffer_start,       &H::match_buffer_end,       &H::match_backref,       &H::match_long_set,       &H::match_set,       &H::match_jump,       &H::match_alt,       &H::match_rep,       &H::match_combining,       &H::match_soft_buffer_end,       &H::match_restart_continue,       &H::match_dot_repeat_dispatch,       &H::match_char_repeat,       &H::match_set_repeat,       &H::match_long_set_repeat,       &H::match_backstep,       &H::match_assert_backref,       &H::match_toggle_case,       &H::match_recursion    };
}
template <class Predicate, class BidiIterator, class charT, class traits>   int regex_grep(Predicate ,                                BidiIterator ,                                BidiIterator ,                                 D<charT, traits>& p4,                                match_flags ) {
    F<> m;
    H<BidiIterator, F<>::allocator_type, traits> b(0,0, m, p4, match_default,0);
    b.find()    ;
}
unsigned  J::GrepFiles(  )               {
    int r = regex_grep(0,0,0, pdata->e, c);
}
class H
{
    typedef bool (H::*matcher_proc_type) ();
    bool find ();
    bool match_startmark ();
};
bool
H::find ()
{
    matcher_proc_type a[] = { (&H::match_startmark) };
}

Reply via email to