This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v5 00/11] [PR gdb/14441] Support C++11 rvalue references in gdb
- From: Artemiy Volkov <artemiyv at acm dot org>
- To: gdb-patches at sourceware dot org
- Cc: palves at redhat dot com, keiths at redhat dot com
- Date: Sun, 19 Jun 2016 18:08:31 +0300
- Subject: Re: [PATCH v5 00/11] [PR gdb/14441] Support C++11 rvalue references in gdb
- Authentication-results: sourceware.org; auth=none
- References: <1458593958-25656-1-git-send-email-artemiyv at acm dot org> <20160606192225 dot 12384-1-artemiyv at acm dot org>
On Mon, Jun 06, 2016 at 10:22:14PM +0300, Artemiy Volkov wrote:
> Hi all,
>
> this is my fifth take on fixing gdb/14441 which deals with C++11 rvalue
> references.
>
> The approach is rather straightforward and the work for the most part consisted
> of mimicking the behavior for regular references. In gdbtypes.c, several helper
> functions were introduced and some parameterized by the reference kind to
> simplify the access to reference type objects API.
>
> The only interesting part is the addition of overloading resolution rules
> with regard to rvalue references. All of the cases introduced in 13.3.3.1.4 and
> 13.3.3.2 were accounted for at the beginning of rank_one_type().
>
> With this patch it is now also possible to fix the evaluation of decltype,
> which should return a plain type object, an lvalue reference or an rvalue
> reference depending on a type category of the type of its operand. However,
> this would require introduction of the type category notion to gdb, which I
> think only needs adding a new constant to lval_type and propagating the type
> category through different parts of an expression in gdb/valops.c. I'm willing
> to do this if this patchset turns out to be OK.
>
> Changes from v1 consist of dropping the libiberty part of 05/11 and the
> consequent testsuite changes. I have learned that introducing rvalue reference
> support to the demangler in cplus-dem.c is completely unnecessary, since
> virtually all contemporary compilers generate symbol names handled in
> cp-demangle.c. Therefore I have removed some of the testcases in
> gdb.cp/demangle.exp and switched the others to use the gnu-v3 demangling style.
>
> Changes from v2 are numerous coding style fixes, improvements and
> simplifications of the changelog, reorganization and reordering of the
> patchset, removal of redundant code in gdb/python/*, addition of a couple of
> python tests, and a few bugfixes.
>
> Changes from v3 are a few more coding style / English grammar fixes and code
> simplifications left over from v2.
>
> Changes from v4 consist for the most part of reorganizing the additions to the
> testsuite: instead of putting the newly created testcases next to the matching
> lvalue reference tests, we create new files in the testsuite to place them
> into; also a small bug in the python part of the patchset has been fixed and
> the whole thing rebased against the current master branch. I have also added
> the PR number to the Changelog entries in the commit messages.
Ping?
>
> Artemiy Volkov (11):
> gdb: gdbtypes: add definitions for rvalue reference type
> gdb: gdbtypes: change {lookup,make}_reference_type() API
> gdb: valops: add ability to return rvalue reference values from
> value_ref()
> gdb: parse: support rvalue reference type
> gdb: demangle: implement demangling for rvalue reference typenames
> gdb: print: implement correct printing of rvalue reference types and
> values
> gdb: dwarf2read: support DW_TAG_rvalue_reference type
> gdb: python: support rvalue references in the gdb module
> gdb: convert lvalue reference type check to general reference type
> check
> gdb: gdbtypes: add rvalue references to overloading resolution
> gdb: testsuite: add rvalue reference tests
>
> gdb/aarch64-tdep.c | 5 +-
> gdb/ada-lang.c | 2 +-
> gdb/amd64-tdep.c | 2 +-
> gdb/amd64-windows-tdep.c | 1 +
> gdb/arm-tdep.c | 5 +-
> gdb/ax-gdb.c | 2 +
> gdb/c-exp.y | 6 +-
> gdb/c-typeprint.c | 10 +-
> gdb/c-valprint.c | 14 +-
> gdb/c-varobj.c | 10 +-
> gdb/compile/compile-c-symbols.c | 2 +-
> gdb/completer.c | 3 +-
> gdb/cp-name-parser.y | 4 +
> gdb/cp-support.c | 3 +-
> gdb/darwin-nat-info.c | 2 +-
> gdb/dwarf2loc.c | 4 +-
> gdb/dwarf2read.c | 15 +-
> gdb/eval.c | 16 +-
> gdb/f-exp.y | 2 +-
> gdb/findvar.c | 6 +-
> gdb/gdbtypes.c | 105 +++++++++++--
> gdb/gdbtypes.h | 20 ++-
> gdb/guile/scm-type.c | 2 +-
> gdb/guile/scm-value.c | 2 +-
> gdb/hppa-tdep.c | 1 +
> gdb/infcall.c | 5 +-
> gdb/language.c | 3 +-
> gdb/m32c-tdep.c | 8 +-
> gdb/m88k-tdep.c | 1 +
> gdb/mn10300-tdep.c | 1 +
> gdb/msp430-tdep.c | 2 +-
> gdb/parse.c | 39 ++---
> gdb/parser-defs.h | 1 +
> gdb/ppc-sysv-tdep.c | 7 +-
> gdb/printcmd.c | 2 +-
> gdb/python/lib/gdb/command/explore.py | 2 +-
> gdb/python/lib/gdb/types.py | 4 +-
> gdb/python/py-type.c | 14 +-
> gdb/python/py-value.c | 37 +++--
> gdb/python/py-xmethods.c | 10 +-
> gdb/s390-linux-tdep.c | 2 +-
> gdb/sparc-tdep.c | 1 +
> gdb/sparc64-tdep.c | 1 +
> gdb/spu-tdep.c | 1 +
> gdb/stabsread.c | 3 +-
> gdb/symtab.c | 3 +-
> gdb/testsuite/gdb.cp/demangle.exp | 36 +++++
> gdb/testsuite/gdb.cp/rvalue-ref-casts.cc | 56 +++++++
> gdb/testsuite/gdb.cp/rvalue-ref-casts.exp | 76 ++++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-overload.cc | 39 +++++
> gdb/testsuite/gdb.cp/rvalue-ref-overload.exp | 103 +++++++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-params.cc | 74 +++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-params.exp | 61 ++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc | 73 +++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp | 43 ++++++
> gdb/testsuite/gdb.cp/rvalue-ref-types.cc | 73 +++++++++
> gdb/testsuite/gdb.cp/rvalue-ref-types.exp | 165 +++++++++++++++++++++
> gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc | 55 +++++++
> .../gdb.python/py-rvalue-ref-value-cc.exp | 56 +++++++
> gdb/typeprint.c | 4 +-
> gdb/valarith.c | 6 +-
> gdb/valops.c | 70 ++++-----
> gdb/valprint.c | 5 +-
> gdb/value.c | 12 +-
> gdb/value.h | 2 +-
> gdb/varobj.c | 2 +-
> 66 files changed, 1235 insertions(+), 167 deletions(-)
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-casts.cc
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-casts.exp
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-overload.cc
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-overload.exp
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-params.cc
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-params.exp
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-types.cc
> create mode 100644 gdb/testsuite/gdb.cp/rvalue-ref-types.exp
> create mode 100644 gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc
> create mode 100644 gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp
>
> --
> 2.8.3
>