This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Deleted branch fixes


The branch 'fixes' was deleted.
It previously pointed to:

 c9cf730... Fix infinite recursion when printing static member with typ

Diff:

!!! WARNING: THE FOLLOWING COMMITS ARE NO LONGER ACCESSIBLE (LOST):
-------------------------------------------------------------------

  c9cf730... Fix infinite recursion when printing static member with typ

commit c9cf7302418ad14b7f72949ba0421b9df3cd1127
Author: Weimin Pan <weimin.pan@oracle.com>
Date:   Wed Mar 28 13:23:48 2018 -0600

    Fix infinite recursion when printing static member with typedef
    
    The original problem was fixed (see related PR 22242). But using a typedef
    as the declared type for a static member variable, as commented in this PR,
    is still causing gdb to get into infinite loop when printing the static
    member's value. This problem can be reproduced as follows:
    
    % cat t.cc
    class A {
        typedef A type;
    public:
        bool operator==(const type& other) { return true; }
    
        static const type INSTANCE;
    };
    
    const A A::INSTANCE;
    
    int main() {
        A a;
        if (a == A::INSTANCE) {
            return -1;
        }
        return 0;
    }
    % g++ -g t.cc
    % gdb -ex "start" -ex "p a" a.out
    
    The fix is rather trivial - in cp_print_static_field(), should call
    check_typedef() to get the static member's real type and use it to
    check whether it's a struct or an array.
    
    As Simon suggested, I've added a new test case to the testsuite
    and am passing the original type, not the real type, as argument
    to both cp_print_value_fields() and val_print().
    
    Re-tested on both aarch64-linux-gnu and amd64-linux-gnu. No regressions.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]