regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
# This file holds test cases for the demangler.
|
2004-01-02 20:33:55 +00:00
|
|
|
# Each test case looks like this:
|
|
|
|
# options
|
|
|
|
# input to be demangled
|
|
|
|
# expected output
|
|
|
|
#
|
|
|
|
# Supported options:
|
|
|
|
# --format=<name> Sets the demangling style.
|
|
|
|
# --no-params There are two lines of expected output; the first
|
|
|
|
# is with DMGL_PARAMS, the second is without it.
|
|
|
|
# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected
|
|
|
|
# output is an integer representing ctor_kind.
|
|
|
|
# --is-v3-dtor Likewise, but for dtors.
|
2005-12-11 01:34:02 +00:00
|
|
|
# --ret-postfix Passes the DMGL_RET_POSTFIX option
|
2004-01-02 20:33:55 +00:00
|
|
|
#
|
|
|
|
# For compatibility, just in case it matters, the options line may be
|
|
|
|
# empty, to mean --format=auto. If it doesn't start with --, then it
|
|
|
|
# may contain only a format name.
|
|
|
|
#
|
|
|
|
# A line starting with `#' is ignored.
|
|
|
|
# However, blank lines in this file are NOT ignored.
|
|
|
|
#
|
regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
# Tests integer overflow problem PR70492
|
|
|
|
|
|
|
|
__vt_90000000000cafebabe
|
|
|
|
__vt_90000000000cafebabe
|
regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
# Tests write access violation PR70498
|
|
|
|
|
|
|
|
_Z80800000000000000000000
|
|
|
|
_Z80800000000000000000000
|
regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
# Tests write access violation PR70926
|
|
|
|
|
|
|
|
0__Ot2m02R5T0000500000
|
|
|
|
0__Ot2m02R5T0000500000
|
regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
|
|
|
|
0__GT50000000000_
|
|
|
|
0__GT50000000000_
|
regress-demangle: New file.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
From-SVN: r26205
1999-04-05 14:28:59 +00:00
|
|
|
#
|
|
|
|
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
__t2m05B500000000000000000_
|
|
|
|
__t2m05B500000000000000000_
|
|
|
|
##
|
|
|
|
## Tests stack overflow PR71696
|
1999-10-19 17:52:52 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
#__10%0__S4_0T0T0
|
|
|
|
#%0<>::%0(%0<>)
|
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_
|
|
|
|
_
|
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_vt
|
|
|
|
_vt
|
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_$_1Acitz
|
|
|
|
_$_1Acitz
|
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_$_H1R
|
|
|
|
_$_H1R
|
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_Q8ccQ4M2e.
|
|
|
|
_Q8ccQ4M2e.
|
2019-04-29 22:19:01 +00:00
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_ZmmAtl
|
|
|
|
_ZmmAtl
|
2019-04-30 14:20:11 +00:00
|
|
|
# Could crash
|
|
|
|
--no-params
|
|
|
|
_ZZaSFvOEES_
|
|
|
|
_ZZaSFvOEES_
|
|
|
|
_ZZaSFvOEES_
|
2019-04-30 14:22:41 +00:00
|
|
|
# Could crash
|
|
|
|
|
|
|
|
_ZZeqFvOEES_z
|
|
|
|
_ZZeqFvOEES_z
|
1999-10-19 17:52:52 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
# demangler/80513 Test for bogus characters after __thunk_
|
|
|
|
|
|
|
|
__thunk_16a_$_1x
|
|
|
|
__thunk_16a_$_1x
|
2000-08-31 21:44:25 +00:00
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
# demangler/80513 Test for overflow in consume_count
|
|
|
|
|
|
|
|
__thunk_4294967297__$_1x
|
|
|
|
__thunk_4294967297__$_1x
|
2001-02-02 00:27:39 +00:00
|
|
|
#
|
2010-05-26 16:13:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5n
|
|
|
|
fo5(__int128)
|
|
|
|
fo5
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5o
|
|
|
|
fo5(unsigned __int128)
|
|
|
|
fo5
|
|
|
|
#
|
2001-02-02 00:27:39 +00:00
|
|
|
--format=java
|
|
|
|
_ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi
|
|
|
|
java.awt.ScrollPane.addImpl(java.awt.Component, java.lang.Object, int)
|
|
|
|
#
|
|
|
|
--format=java
|
|
|
|
_ZN4java3awt4geom15AffineTransform9getMatrixEP6JArrayIdE
|
|
|
|
java.awt.geom.AffineTransform.getMatrix(double[])
|
|
|
|
#
|
|
|
|
--format=java
|
|
|
|
_ZN23Mangle$Inner$InnerInner3fooEP6JArrayIPS0_IiEEdPS0_IPS0_IPS0_IPS0_IPN4java4lang6StringEEEEEPS0_IPS0_IPN6MangleEEE
|
|
|
|
Mangle$Inner$InnerInner.foo(int[][], double, java.lang.String[][][][], Mangle[][])
|
|
|
|
#
|
|
|
|
--format=java
|
|
|
|
_ZN6JArray1tEP6JArrayIPS_E
|
|
|
|
JArray.t(JArray[])
|
|
|
|
#
|
|
|
|
--format=java
|
|
|
|
_ZN4Prim1iEibcdfwPN4java4lang6StringEsx
|
|
|
|
Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long)
|
2001-12-12 23:08:07 +00:00
|
|
|
#
|
2002-07-09 19:57:09 -04:00
|
|
|
--format=java
|
|
|
|
_ZN4java4util14Map__U24_Entry11class__U24_E
|
|
|
|
java.util.Map$Entry.class$
|
|
|
|
#
|
2003-12-20 15:53:06 +00:00
|
|
|
--format=java
|
|
|
|
_ZN3org7eclipse3cdt5debug8internal4core5model9CVariable6sizeof$Ev
|
|
|
|
org.eclipse.cdt.debug.internal.core.model.CVariable.sizeof()
|
|
|
|
#
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
--format=auto --no-params
|
2004-01-02 20:33:55 +00:00
|
|
|
_Utf58_0_1__1_2147483647__2147483648
|
2001-12-12 23:08:07 +00:00
|
|
|
_Utf58_0_1__1_2147483647__2147483648
|
|
|
|
_Utf58_0_1__1_2147483647__2147483648
|
2002-01-31 01:03:05 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2002-01-31 01:03:05 +00:00
|
|
|
St9bad_alloc
|
|
|
|
std::bad_alloc
|
2004-01-02 20:33:55 +00:00
|
|
|
std::bad_alloc
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN1f1fE
|
|
|
|
f::f
|
2004-01-02 20:33:55 +00:00
|
|
|
f::f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fv
|
|
|
|
f()
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fi
|
|
|
|
f(int)
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3foo3bar
|
|
|
|
foo(bar)
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Zrm1XS_
|
|
|
|
operator%(X, X)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator%
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZplR1XS0_
|
|
|
|
operator+(X&, X&)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator+
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZlsRK1XS1_
|
|
|
|
operator<<(X const&, X const&)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator<<
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN3FooIA4_iE3barE
|
2003-11-21 20:12:22 +00:00
|
|
|
Foo<int [4]>::bar
|
2004-01-02 20:33:55 +00:00
|
|
|
Foo<int [4]>::bar
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fIiEvi
|
|
|
|
void f<int>(int)
|
2004-01-02 20:33:55 +00:00
|
|
|
f<int>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z5firstI3DuoEvS0_
|
|
|
|
void first<Duo>(Duo)
|
2004-01-02 20:33:55 +00:00
|
|
|
first<Duo>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z5firstI3DuoEvT_
|
|
|
|
void first<Duo>(Duo)
|
2004-01-02 20:33:55 +00:00
|
|
|
first<Duo>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooIiFvdEiEvv
|
2010-11-13 01:21:12 +00:00
|
|
|
void foo<int, void (double), int>()
|
|
|
|
foo<int, void (double), int>
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z1fIFvvEEvv
|
|
|
|
void f<void ()>()
|
|
|
|
f<void ()>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN1N1fE
|
|
|
|
N::f
|
2004-01-02 20:33:55 +00:00
|
|
|
N::f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN6System5Sound4beepEv
|
|
|
|
System::Sound::beep()
|
2004-01-02 20:33:55 +00:00
|
|
|
System::Sound::beep
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN5Arena5levelE
|
|
|
|
Arena::level
|
2004-01-02 20:33:55 +00:00
|
|
|
Arena::level
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN5StackIiiE5levelE
|
|
|
|
Stack<int, int>::level
|
2004-01-02 20:33:55 +00:00
|
|
|
Stack<int, int>::level
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fI1XEvPVN1AIT_E1TE
|
|
|
|
void f<X>(A<X>::T volatile*)
|
2004-01-02 20:33:55 +00:00
|
|
|
f<X>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZngILi42EEvN1AIXplT_Li2EEE1TE
|
2008-10-06 18:29:42 -04:00
|
|
|
void operator-<42>(A<(42)+(2)>::T)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator-<42>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z4makeI7FactoryiET_IT0_Ev
|
|
|
|
Factory<int> make<Factory, int>()
|
2004-01-02 20:33:55 +00:00
|
|
|
make<Factory, int>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z4makeI7FactoryiET_IT0_Ev
|
|
|
|
Factory<int> make<Factory, int>()
|
2004-01-02 20:33:55 +00:00
|
|
|
make<Factory, int>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3foo5Hello5WorldS0_S_
|
|
|
|
foo(Hello, World, World, Hello)
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooPM2ABi
|
|
|
|
foo(int AB::**)
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZlsRSoRKSs
|
|
|
|
operator<<(std::ostream&, std::string const&)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator<<
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZTI7a_class
|
|
|
|
typeinfo for a_class
|
2004-01-02 20:33:55 +00:00
|
|
|
typeinfo for a_class
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
U4_farrVKPi
|
2003-11-21 20:12:22 +00:00
|
|
|
int* const volatile restrict _far
|
2004-01-02 20:33:55 +00:00
|
|
|
int* const volatile restrict _far
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooILi2EEvRAplT_Li1E_i
|
2008-10-06 18:29:42 -04:00
|
|
|
void foo<2>(int (&) [(2)+(1)])
|
2004-01-02 20:33:55 +00:00
|
|
|
foo<2>
|
2016-05-18 21:52:26 +00:00
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooILi2EEvOAplT_Li1E_i
|
|
|
|
void foo<2>(int (&&) [(2)+(1)])
|
|
|
|
foo<2>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fM1AKFvvE
|
|
|
|
f(void (A::*)() const)
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooc
|
|
|
|
foo(char)
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
cpp-id-data.h (UC): Was U, conflicts with U...
libcpp/ChangeLog:
2008-04-14 Kris Van Hees <kris.van.hees@oracle.com>
* include/cpp-id-data.h (UC): Was U, conflicts with U... literal.
* include/cpplib.h (CHAR16, CHAR32, STRING16, STRING32): New tokens.
(struct cpp_options): Added uliterals.
(cpp_interpret_string): Update prototype.
(cpp_interpret_string_notranslate): Idem.
* charset.c (init_iconv_desc): New width member in cset_converter.
(cpp_init_iconv): Add support for char{16,32}_cset_desc.
(convert_ucn): Idem.
(emit_numeric_escape): Idem.
(convert_hex): Idem.
(convert_oct): Idem.
(convert_escape): Idem.
(converter_for_type): New function.
(cpp_interpret_string): Use converter_for_type, support u and U prefix.
(cpp_interpret_string_notranslate): Match changed prototype.
(wide_str_to_charconst): Use converter_for_type.
(cpp_interpret_charconst): Add support for CPP_CHAR{16,32}.
* directives.c (linemarker_dir): Macro U changed to UC.
(parse_include): Idem.
(register_pragma_1): Idem.
(restore_registered_pragmas): Idem.
(get__Pragma_string): Support CPP_STRING{16,32}.
* expr.c (eval_token): Support CPP_CHAR{16,32}.
* init.c (struct lang_flags): Added uliterals.
(lang_defaults): Idem.
* internal.h (struct cset_converter) <width>: New field.
(struct cpp_reader) <char16_cset_desc>: Idem.
(struct cpp_reader) <char32_cset_desc>: Idem.
* lex.c (digraph_spellings): Macro U changed to UC.
(OP, TK): Idem.
(lex_string): Add support for u'...', U'...', u... and U....
(_cpp_lex_direct): Idem.
* macro.c (_cpp_builtin_macro_text): Macro U changed to UC.
(stringify_arg): Support CPP_CHAR{16,32} and CPP_STRING{16,32}.
gcc/ChangeLog:
2008-04-14 Kris Van Hees <kris.van.hees@oracle.com>
* c-common.c (CHAR16_TYPE, CHAR32_TYPE): New macros.
(fname_as_string): Match updated cpp_interpret_string prototype.
(fix_string_type): Support char16_t* and char32_t*.
(c_common_nodes_and_builtins): Add char16_t and char32_t (and
derivative) nodes. Register as builtin if C++0x.
(c_parse_error): Support CPP_CHAR{16,32}.
* c-common.h (RID_CHAR16, RID_CHAR32): New elements.
(enum c_tree_index) <CTI_CHAR16_TYPE, CTI_SIGNED_CHAR16_TYPE,
CTI_UNSIGNED_CHAR16_TYPE, CTI_CHAR32_TYPE, CTI_SIGNED_CHAR32_TYPE,
CTI_UNSIGNED_CHAR32_TYPE, CTI_CHAR16_ARRAY_TYPE,
CTI_CHAR32_ARRAY_TYPE>: New elements.
(char16_type_node, signed_char16_type_node, unsigned_char16_type_node,
char32_type_node, signed_char32_type_node, char16_array_type_node,
char32_array_type_node): New defines.
* c-lex.c (cb_ident): Match updated cpp_interpret_string prototype.
(c_lex_with_flags): Support CPP_CHAR{16,32} and CPP_STRING{16,32}.
(lex_string): Support CPP_STRING{16,32}, match updated
cpp_interpret_string and cpp_interpret_string_notranslate prototypes.
(lex_charconst): Support CPP_CHAR{16,32}.
* c-parser.c (c_parser_postfix_expression): Support CPP_CHAR{16,32}
and CPP_STRING{16,32}.
gcc/cp/ChangeLog:
2008-04-14 Kris Van Hees <kris.van.hees@oracle.com>
* cvt.c (type_promotes_to): Support char16_t and char32_t.
* decl.c (grokdeclarator): Disallow signed/unsigned/short/long on
char16_t and char32_t.
* lex.c (reswords): Add char16_t and char32_t (for c++0x).
* mangle.c (write_builtin_type): Mangle char16_t/char32_t as vendor
extended builtin type u8char32_t.
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Support
RID_CHAR{16,32}.
(cp_lexer_print_token): Support CPP_STRING{16,32}.
(cp_parser_is_string_literal): Idem.
(cp_parser_string_literal): Idem.
(cp_parser_primary_expression): Support CPP_CHAR{16,32} and
CPP_STRING{16,32}.
(cp_parser_simple_type_specifier): Support RID_CHAR{16,32}.
* tree.c (char_type_p): Support char16_t and char32_t as char types.
* typeck.c (string_conv_p): Support char16_t and char32_t.
gcc/testsuite/ChangeLog:
2008-04-14 Kris Van Hees <kris.van.hees@oracle.com>
Tests for char16_t and char32_t support.
* g++.dg/ext/utf-cvt.C: New
* g++.dg/ext/utf-cxx0x.C: New
* g++.dg/ext/utf-cxx98.C: New
* g++.dg/ext/utf-dflt.C: New
* g++.dg/ext/utf-gnuxx0x.C: New
* g++.dg/ext/utf-gnuxx98.C: New
* g++.dg/ext/utf-mangle.C: New
* g++.dg/ext/utf-typedef-cxx0x.C: New
* g++.dg/ext/utf-typedef-
* g++.dg/ext/utf-typespec.C: New
* g++.dg/ext/utf16-1.C: New
* g++.dg/ext/utf16-2.C: New
* g++.dg/ext/utf16-3.C: New
* g++.dg/ext/utf16-4.C: New
* g++.dg/ext/utf32-1.C: New
* g++.dg/ext/utf32-2.C: New
* g++.dg/ext/utf32-3.C: New
* g++.dg/ext/utf32-4.C: New
* gcc.dg/utf-cvt.c: New
* gcc.dg/utf-dflt.c: New
* gcc.dg/utf16-1.c: New
* gcc.dg/utf16-2.c: New
* gcc.dg/utf16-3.c: New
* gcc.dg/utf16-4.c: New
* gcc.dg/utf32-1.c: New
* gcc.dg/utf32-2.c: New
* gcc.dg/utf32-3.c: New
* gcc.dg/utf32-4.c: New
libiberty/ChangeLog:
2008-04-14 Kris Van Hees <kris.van.hees@oracle.com>
* testsuite/demangle-expected: Added tests for char16_t and char32_t.
From-SVN: r134438
2008-04-18 13:58:08 +00:00
|
|
|
_Z2f0u8char16_t
|
|
|
|
f0(char16_t)
|
|
|
|
f0
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z2f0Pu8char16_t
|
|
|
|
f0(char16_t*)
|
|
|
|
f0
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z2f0u8char32_t
|
|
|
|
f0(char32_t)
|
|
|
|
f0
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z2f0Pu8char32_t
|
|
|
|
f0(char32_t*)
|
|
|
|
f0
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
2CBIL_Z3foocEE
|
|
|
|
CB<foo(char)>
|
2004-01-02 20:33:55 +00:00
|
|
|
CB<foo(char)>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
2CBIL_Z7IsEmptyEE
|
|
|
|
CB<IsEmpty>
|
2004-01-02 20:33:55 +00:00
|
|
|
CB<IsEmpty>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZZN1N1fEiE1p
|
|
|
|
N::f(int)::p
|
2004-01-02 20:33:55 +00:00
|
|
|
N::f(int)::p
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZZN1N1fEiEs
|
|
|
|
N::f(int)::string literal
|
2004-01-02 20:33:55 +00:00
|
|
|
N::f(int)::string literal
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fPFvvEM1SFvvE
|
|
|
|
f(void (*)(), void (S::*)())
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN1N1TIiiE2mfES0_IddE
|
|
|
|
N::T<int, int>::mf(N::T<double, double>)
|
2004-01-02 20:33:55 +00:00
|
|
|
N::T<int, int>::mf
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZSt5state
|
|
|
|
std::state
|
2004-01-02 20:33:55 +00:00
|
|
|
std::state
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNSt3_In4wardE
|
|
|
|
std::_In::ward
|
2004-01-02 20:33:55 +00:00
|
|
|
std::_In::ward
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fKPFiiE
|
|
|
|
f(int (* const)(int))
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i
|
2003-11-21 20:12:22 +00:00
|
|
|
f(int [sizeof (N::A::f() const::foo)])
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fA37_iPS_
|
2003-11-21 20:12:22 +00:00
|
|
|
f(int [37], int (*) [37])
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fM1AFivEPS0_
|
|
|
|
f(int (A::*)(), int (*)())
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fPFPA1_ivE
|
|
|
|
f(int (*(*)()) [1])
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fPKM1AFivE
|
|
|
|
f(int (A::* const*)())
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1jM1AFivEPS1_
|
|
|
|
j(int (A::*)(), int (A::**)())
|
2004-01-02 20:33:55 +00:00
|
|
|
j
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1sPA37_iPS0_
|
|
|
|
s(int (*) [37], int (**) [37])
|
2004-01-02 20:33:55 +00:00
|
|
|
s
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooA30_A_i
|
2003-11-21 20:12:22 +00:00
|
|
|
foo(int [30][])
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3kooPA28_A30_i
|
|
|
|
koo(int (*) [28][30])
|
2004-01-02 20:33:55 +00:00
|
|
|
koo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZlsRKU3fooU4bart1XS0_
|
|
|
|
operator<<(X bart foo const&, X bart)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator<<
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZlsRKU3fooU4bart1XS2_
|
|
|
|
operator<<(X bart foo const&, X bart foo const)
|
2004-01-02 20:33:55 +00:00
|
|
|
operator<<
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fM1AKFivE
|
|
|
|
f(int (A::*)() const)
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3absILi11EEvv
|
|
|
|
void abs<11>()
|
2004-01-02 20:33:55 +00:00
|
|
|
abs<11>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN1AIfEcvT_IiEEv
|
|
|
|
A<float>::operator int<int>()
|
2004-01-02 20:33:55 +00:00
|
|
|
A<float>::operator int<int>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_
|
|
|
|
void libcw_app_ct::add_option<libcw_app_ct>(void (libcw_app_ct::*)(char const*), char const*, char, char const*, char const*)
|
2004-01-02 20:33:55 +00:00
|
|
|
libcw_app_ct::add_option<libcw_app_ct>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE
|
|
|
|
guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
|
2004-01-02 20:33:55 +00:00
|
|
|
guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE
|
|
|
|
libcw::debug::cwprint_using_tct<libcw::_private_::GlobalObject> libcw::debug::cwprint_using<libcw::_private_::GlobalObject>(libcw::_private_::GlobalObject const&, void (libcw::_private_::GlobalObject::*)(std::ostream&) const)
|
2004-01-02 20:33:55 +00:00
|
|
|
libcw::debug::cwprint_using<libcw::_private_::GlobalObject>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv
|
|
|
|
std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top() const
|
2004-01-02 20:33:55 +00:00
|
|
|
std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_
|
|
|
|
std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==(std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*> const&) const
|
2004-01-02 20:33:55 +00:00
|
|
|
std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_
|
|
|
|
std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-(std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > > const&) const
|
2004-01-02 20:33:55 +00:00
|
|
|
std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_
|
|
|
|
char* std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>(char*, char*, libcw::debug::no_alloc_checking_allocator const&)
|
2004-01-02 20:33:55 +00:00
|
|
|
std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_
|
|
|
|
void f<A, A*, A const*>(A, A*, A const*, A const* (*) [4], A const* (* C::*) [4])
|
2004-01-02 20:33:55 +00:00
|
|
|
f<A, A*, A const*>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_
|
|
|
|
foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************)
|
2004-01-02 20:33:55 +00:00
|
|
|
foo
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_
|
|
|
|
std::D<A*, A*&, A**> std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>(std::D<A*, A* const&, A* const*>, std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A**)
|
2004-01-02 20:33:55 +00:00
|
|
|
std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_X11TransParseAddress
|
2003-06-26 19:09:56 +00:00
|
|
|
_X11TransParseAddress
|
|
|
|
_X11TransParseAddress
|
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE
|
|
|
|
std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
|
2004-01-02 20:33:55 +00:00
|
|
|
std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_GLOBAL__I__Z2fnv
|
2010-11-16 17:56:50 +00:00
|
|
|
global constructors keyed to fn()
|
|
|
|
global constructors keyed to fn()
|
2003-06-26 19:09:56 +00:00
|
|
|
#
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-06-26 19:09:56 +00:00
|
|
|
_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_
|
|
|
|
r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const)
|
2004-01-02 20:33:55 +00:00
|
|
|
r
|
2003-11-21 21:34:55 +00:00
|
|
|
#
|
|
|
|
# This is from the gdb testsuite gdb.cp/cplusfuncs.exp.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-21 21:34:55 +00:00
|
|
|
_Z10hairyfunc5PFPFilEPcE
|
|
|
|
hairyfunc5(int (*(*)(char*))(long))
|
2004-01-02 20:33:55 +00:00
|
|
|
hairyfunc5
|
2003-11-21 21:34:55 +00:00
|
|
|
#
|
|
|
|
# This is from gcc PR 8861
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-21 21:34:55 +00:00
|
|
|
_Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE
|
2008-10-06 18:29:42 -04:00
|
|
|
void f<1, (char)120>(A<(1)+((int)((double)[810000000000000000703DAD7A370C5]))>)
|
2004-02-25 04:51:39 +00:00
|
|
|
f<1, (char)120>
|
2003-11-21 21:34:55 +00:00
|
|
|
#
|
|
|
|
# This is also from gcc PR 8861
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-21 21:34:55 +00:00
|
|
|
_Z1fILi1EEv1AIXplT_cvingLf3f800000EEE
|
2008-10-06 18:29:42 -04:00
|
|
|
void f<1>(A<(1)+((int)(-((float)[3f800000])))>)
|
2004-01-02 20:33:55 +00:00
|
|
|
f<1>
|
2003-11-21 21:34:55 +00:00
|
|
|
#
|
|
|
|
# This is from a libstdc++ debug mode patch.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-21 21:34:55 +00:00
|
|
|
_ZNK11__gnu_debug16_Error_formatter14_M_format_wordImEEvPciPKcT_
|
|
|
|
void __gnu_debug::_Error_formatter::_M_format_word<unsigned long>(char*, int, char const*, unsigned long) const
|
2004-01-02 20:33:55 +00:00
|
|
|
__gnu_debug::_Error_formatter::_M_format_word<unsigned long>
|
2003-11-21 21:34:55 +00:00
|
|
|
#
|
2003-11-26 23:33:05 +00:00
|
|
|
# The new demangler used to core dump on this.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-26 23:33:05 +00:00
|
|
|
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairISsPFbP6sqlitePPcEESt6vectorIS9_SaIS9_EEEESE_ET0_T_SG_SF_
|
|
|
|
__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >)
|
2004-01-02 20:33:55 +00:00
|
|
|
std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
#
|
2003-11-26 23:33:05 +00:00
|
|
|
# The new demangler used to fail on this.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-11-26 23:33:05 +00:00
|
|
|
_Z1fP1cIPFiiEE
|
|
|
|
f(c<int (*)(int)>*)
|
2004-01-02 20:33:55 +00:00
|
|
|
f
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
#
|
|
|
|
# Wrap expressions using '>' in an extra layer of parens to avoid
|
|
|
|
# confusion with the '>' which ends the template parameters.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
_Z4dep9ILi3EEvP3fooIXgtT_Li2EEE
|
2008-10-06 18:29:42 -04:00
|
|
|
void dep9<3>(foo<((3)>(2))>*)
|
2004-01-02 20:33:55 +00:00
|
|
|
dep9<3>
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
#
|
|
|
|
# Watch out for templated version of `operator<'--it needs an extra
|
|
|
|
# space.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
_ZStltI9file_pathSsEbRKSt4pairIT_T0_ES6_
|
|
|
|
bool std::operator< <file_path, std::string>(std::pair<file_path, std::string> const&, std::pair<file_path, std::string> const&)
|
2004-01-02 20:33:55 +00:00
|
|
|
std::operator< <file_path, std::string>
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
#
|
|
|
|
# More hairy qualifier handling.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")
* cp-demangle.c (IS_UPPER, IS_LOWER): Define.
(d_last_char): Define new macro.
(d_make_name): Reject an empty name.
(d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
(d_substitution, d_print_identifier): Likewise.
(d_print_comp) [D_COMP_OPERATOR]: Likewise.
(d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
(d_print_mod) Use new d_last_char macro.
(d_print_cast): Use new d_last_char macro.
(is_ctor_or_dtor): Don't leak memory.
Fix handling of member function modifiers:
* cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
(d_dump): Dump new d_comp_type values.
(d_make_comp): Accept new d_comp_type values.
(has_return_type): Only accept _THIS variants of qualifiers.
(d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
qualifiers.
(d_cv_qualifiers): Add member_fn parameter. Change all callers.
(d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
qualifiers and printing them at the end, add _THIS qualifiers to
the modifier list.
(d_print_comp) [D_COMP_*_THIS]: New cases.
(d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
qualifiers.
(d_print_mod_list): Add suffix parameter. Change all callers.
Keep walking the list even if the current modifier has been
printed.
(d_print_mod): Handle new _THIS qualifiers.
(d_print_function_type): Handle new _THIS qualifiers when deciding
whether to print a parenthesis. Put a space before the
parenthesis in some cases. Call d_print_mod_list again at the
end, passing suffix as 1.
(is_ctor_or_dtor): Look for new _THIS qualifiers.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13304:
* cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
before the '<' is itself a '<', insert a space.
(d_print_cast): Likewise.
* testsuite/demangle-expected: Add test case.
Fix for PR gcc/13244:
* cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
which uses the '>' operator in an extra layer of parens.
* testsuite/demangle-expected: Add test case.
From-SVN: r74290
2003-12-04 19:48:44 +00:00
|
|
|
_Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE
|
2004-02-25 04:51:39 +00:00
|
|
|
hairyfunc(int (* const (X::** (* restrict (* volatile* (Y::*)(int) const)(char*)) [2])(long) const) [3])
|
2004-01-02 20:33:55 +00:00
|
|
|
hairyfunc
|
2003-12-15 14:37:25 +00:00
|
|
|
#
|
|
|
|
# Check that negative numbers are handled correctly.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-15 14:37:25 +00:00
|
|
|
_Z1fILin1EEvv
|
|
|
|
void f<-1>()
|
2004-01-02 20:33:55 +00:00
|
|
|
f<-1>
|
2003-12-15 14:37:25 +00:00
|
|
|
#
|
|
|
|
# Check a destructor of a standard substitution.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-15 14:37:25 +00:00
|
|
|
_ZNSdD0Ev
|
|
|
|
std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
|
2004-01-02 20:33:55 +00:00
|
|
|
std::basic_iostream<char, std::char_traits<char> >::~basic_iostream
|
2003-12-15 14:37:25 +00:00
|
|
|
#
|
2003-12-15 23:29:31 +00:00
|
|
|
# Another case where we got member function qualifiers wrong.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-15 23:29:31 +00:00
|
|
|
_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_
|
|
|
|
nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const
|
2004-01-02 20:33:55 +00:00
|
|
|
nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead
|
2003-12-15 23:29:31 +00:00
|
|
|
#
|
2003-12-19 21:14:35 +00:00
|
|
|
# Another member function qualifier test case, when the member function
|
|
|
|
# returns a pointer to function.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-19 21:14:35 +00:00
|
|
|
_ZNK1C1fIiEEPFivEv
|
|
|
|
int (*C::f<int>() const)()
|
2004-01-02 20:33:55 +00:00
|
|
|
C::f<int>
|
2003-12-19 21:14:35 +00:00
|
|
|
#
|
|
|
|
# Another case where we got member function qualifiers wrong.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-19 21:14:35 +00:00
|
|
|
_ZZ3BBdI3FooEvvENK3Fob3FabEv
|
2017-09-26 02:38:12 +00:00
|
|
|
BBd<Foo>()::Fob::Fab() const
|
|
|
|
BBd<Foo>()::Fob::Fab
|
2003-12-19 21:14:35 +00:00
|
|
|
#
|
|
|
|
# The same idea one level deeper.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-19 21:14:35 +00:00
|
|
|
_ZZZ3BBdI3FooEvvENK3Fob3FabEvENK3Gob3GabEv
|
2017-09-26 02:38:12 +00:00
|
|
|
BBd<Foo>()::Fob::Fab() const::Gob::Gab() const
|
|
|
|
BBd<Foo>()::Fob::Fab() const::Gob::Gab
|
2003-12-19 21:14:35 +00:00
|
|
|
#
|
|
|
|
# Yet another member function qualifier problem.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=gnu-v3 --no-params
|
2003-12-19 21:14:35 +00:00
|
|
|
_ZNK5boost6spirit5matchI13rcs_deltatextEcvMNS0_4impl5dummyEFvvEEv
|
|
|
|
boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()() const
|
2004-01-02 20:33:55 +00:00
|
|
|
boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()
|
|
|
|
#
|
2004-02-24 06:32:16 +00:00
|
|
|
# Multi-dimensional arrays with qualifiers on the inner dimensions.
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooIA6_KiEvA9_KT_rVPrS4_
|
|
|
|
void foo<int const [6]>(int const [9][6], int restrict const (* volatile restrict) [9][6])
|
|
|
|
foo<int const [6]>
|
|
|
|
#
|
|
|
|
# From PR libstdc++/12736
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooIA3_iEvRKT_
|
|
|
|
void foo<int [3]>(int const (&) [3])
|
|
|
|
foo<int [3]>
|
|
|
|
#
|
|
|
|
# Related to PR libstdc++/12736
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooIPA3_iEvRKT_
|
|
|
|
void foo<int (*) [3]>(int (* const&) [3])
|
|
|
|
foo<int (*) [3]>
|
|
|
|
#
|
2004-06-28 17:36:27 +00:00
|
|
|
# This used to crash the demangler--PR 16240
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE
|
2009-03-17 19:31:18 -04:00
|
|
|
PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue(PatternDriver::ConflateStringScalarValue const&, PatternDriver::AbstractStringScalarValue const&, PatternDriver::TemplateEnum<PatternDriver::pdcomplement, PatternDriver::complement_names, PatternDriver::COMPLEMENTENUM> const&)
|
2004-06-28 17:36:27 +00:00
|
|
|
PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue
|
2005-07-01 16:39:36 +00:00
|
|
|
#
|
|
|
|
# This used to cause the demangler to walk into undefined memory--PR 22268
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
ALsetchannels
|
|
|
|
ALsetchannels
|
|
|
|
ALsetchannels
|
2004-01-02 20:33:55 +00:00
|
|
|
# Test GNU V3 constructor and destructor identification.
|
|
|
|
# 0 means it is not a constructor/destructor.
|
|
|
|
# Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.
|
|
|
|
--is-v3-ctor
|
|
|
|
_GLOBAL__I__Z2fnv
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-dtor
|
|
|
|
_GLOBAL__I__Z2fnv
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-ctor
|
|
|
|
_ZNSdC1Ev
|
|
|
|
1
|
|
|
|
#
|
|
|
|
--is-v3-dtor
|
|
|
|
_ZNSdC1Ev
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-ctor
|
|
|
|
_ZNSdD0Ev
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-dtor
|
|
|
|
_ZNSdD0Ev
|
|
|
|
1
|
|
|
|
#
|
|
|
|
--is-v3-ctor
|
|
|
|
_ZNSdC2Ev
|
|
|
|
2
|
|
|
|
#
|
|
|
|
--is-v3-dtor
|
|
|
|
_ZNSdC2Ev
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-ctor
|
|
|
|
_ZNSdD1Ev
|
|
|
|
0
|
|
|
|
#
|
|
|
|
--is-v3-dtor
|
|
|
|
_ZNSdD1Ev
|
|
|
|
2
|
2003-12-19 21:14:35 +00:00
|
|
|
#
|
2003-10-20 23:21:30 +00:00
|
|
|
# This used to cause a crash. It doesn't follow the C++ encoding so
|
|
|
|
# the demangled name should be identical to the original symbol name.
|
2004-01-02 20:33:55 +00:00
|
|
|
--format=auto --no-params
|
|
|
|
_test_array__L_1__B23b___clean.6
|
2003-10-20 23:21:30 +00:00
|
|
|
_test_array__L_1__B23b___clean.6
|
|
|
|
_test_array__L_1__B23b___clean.6
|
2005-05-25 16:29:54 -07:00
|
|
|
#
|
|
|
|
--format=java
|
|
|
|
_ZGAN4java4lang5Class7forNameEPNS0_6StringE
|
|
|
|
hidden alias for java.lang.Class.forName(java.lang.String)
|
2005-12-11 01:34:02 +00:00
|
|
|
#
|
|
|
|
# Test cases to verify encoding that determines if a return type is present
|
|
|
|
# Related to PR9861
|
|
|
|
--format=java
|
|
|
|
_ZN4java4lang4Math4acosEJdd
|
|
|
|
java.lang.Math.acos(double)double
|
|
|
|
#
|
|
|
|
--format=auto
|
|
|
|
_ZN4java4lang4Math4acosEJdd
|
|
|
|
double java::lang::Math::acos(double)
|
|
|
|
#
|
|
|
|
--format=auto
|
|
|
|
_ZN4java4lang4Math4acosEJvd
|
|
|
|
void java::lang::Math::acos(double)
|
|
|
|
#
|
|
|
|
--format=auto --ret-postfix
|
|
|
|
_ZN4java4lang4Math4acosEJdd
|
|
|
|
java::lang::Math::acos(double)double
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params --ret-postfix
|
|
|
|
_Z4makeI7FactoryiET_IT0_Ev
|
|
|
|
make<Factory, int>()Factory<int>
|
|
|
|
make<Factory, int>
|
2006-08-27 21:42:55 +00:00
|
|
|
#
|
|
|
|
# From PR 28797
|
|
|
|
--format=auto --no-params
|
|
|
|
_Z1fM1AKiPKS1_
|
|
|
|
f(int const A::*, int const A::* const*)
|
|
|
|
f
|
2006-09-22 13:52:29 +00:00
|
|
|
# This used to cause a core dump in the demangler -- PR 29176
|
|
|
|
--format=auto --no-params
|
|
|
|
SASDASDFASDF_sdfsdf
|
|
|
|
SASDASDFASDF_sdfsdf
|
|
|
|
SASDASDFASDF_sdfsdf
|
2006-12-21 01:29:27 +00:00
|
|
|
# These are all cases of invalid manglings where the demangler would read
|
|
|
|
# past the end of the string.
|
|
|
|
# d_name wasn't honouring a NULL from d_substitution
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZSA
|
|
|
|
_ZSA
|
|
|
|
# d_expr_primary wasn't honouring NULL from cplus_demangle_mangled_name
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN1fIL_
|
|
|
|
_ZN1fIL_
|
|
|
|
# d_operator_name was taking two characters in a row
|
|
|
|
--format=gnu-v3
|
|
|
|
_Za
|
|
|
|
_Za
|
|
|
|
# d_prefix wasn't honouring NULL from d_substitution
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSA
|
|
|
|
_ZNSA
|
|
|
|
# d_prefix wasn't honouring NULL from d_template_param
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNT
|
|
|
|
_ZNT
|
2007-03-16 01:07:52 +00:00
|
|
|
# Dereferencing NULL in d_pointer_to_member_type
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1aMark
|
|
|
|
_Z1aMark
|
2007-05-06 00:01:36 +00:00
|
|
|
# <local-source-name> test 1
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZL3foo_2
|
|
|
|
foo
|
|
|
|
# <local-source-name> test 2
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZL3foo_2vE4var1
|
|
|
|
foo()::var1
|
|
|
|
# <local-source-name> test 3
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZL3foo_2vE4var1_0
|
|
|
|
foo()::var1
|
|
|
|
# <local-source-name> test 4
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
|
|
|
|
myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
|
2008-01-27 06:01:00 +00:00
|
|
|
# Java resource name
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZGr32_java$Sutil$Siso4217$_properties
|
|
|
|
java resource java/util/iso4217.properties
|
2008-09-09 13:38:10 -04:00
|
|
|
# decltype/param placeholder test
|
|
|
|
--format=gnu-v3
|
2009-03-17 19:31:18 -04:00
|
|
|
_Z3addIidEDTplfp_fp0_ET_T0_
|
2009-09-29 23:01:30 -04:00
|
|
|
decltype ({parm#1}+{parm#2}) add<int, double>(int, double)
|
2011-08-01 17:02:07 -04:00
|
|
|
# decltype scope test
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fI1SENDtfp_E4typeET_
|
|
|
|
decltype ({parm#1})::type f<S>(S)
|
2008-09-09 13:38:10 -04:00
|
|
|
# decltype/fn call test
|
|
|
|
--format=gnu-v3
|
2009-03-17 19:31:18 -04:00
|
|
|
_Z4add3IidEDTclL_Z1gEfp_fp0_EET_T0_
|
2009-09-29 23:01:30 -04:00
|
|
|
decltype (g({parm#1}, {parm#2})) add3<int, double>(int, double)
|
2011-07-04 17:44:11 -04:00
|
|
|
# 'this' test
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN1A1fIiEEDTcldtdtdefpT1b1fIT_EEEv
|
|
|
|
decltype ((((*this).b).(f<int>))()) A::f<int>()
|
2008-10-06 18:29:42 -04:00
|
|
|
# new (2008) built in types test
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDfDdDeDhDsDi
|
|
|
|
f(decimal32, decimal64, decimal128, half, char16_t, char32_t)
|
|
|
|
# pack expansion test
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIIPiPfPdEEvDpT_
|
|
|
|
void f<int*, float*, double*>(int*, float*, double*)
|
|
|
|
# '.' test
|
2008-09-09 13:38:10 -04:00
|
|
|
--format=gnu-v3
|
2009-03-17 19:31:18 -04:00
|
|
|
_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_
|
2009-09-29 23:01:30 -04:00
|
|
|
decltype (({parm#1}.(g<double>))()) h<A<int>, double>(A<int>, double)
|
2009-03-17 19:31:18 -04:00
|
|
|
# test for typed function in decltype
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_
|
2011-07-01 17:16:44 +00:00
|
|
|
decltype ({parm#1}+(x())) A<int>::j<int>(int)
|
|
|
|
# typed function in decltype with an argument list
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1tIlEDTplcvT_Li5EclL_Z1qsELi6EEEv
|
|
|
|
decltype (((long)(5))+(q(6))) t<long>()
|
2009-03-23 17:03:01 -04:00
|
|
|
# test for expansion of function parameter pack
|
|
|
|
--format=gnu-v3
|
re PR c++/6057 (expression mangling doesn't work for operator new)
PR c++/6057
PR c++/48051
PR c++/50855
PR c++/51322
gcc/cp/
* mangle.c (write_expression): Support NEW_EXPR, DELETE_EXPR,
THROW_EXPR, CONSTRUCTOR, OVERLOAD. Fix PREINCREMENT_EXPR and
PREDECREMENT_EXPR.
(write_template_arg): Fix mangling of class-scope functions and
argument packs.
(mangle_decl): Update suggested -fabi-version argument.
* operators.def: Add DOTSTAR_EXPR, REINTERPRET_CAST_EXPR,
DYNAMIC_CAST_EXPR; correct CONST_CAST_EXPR, STATIC_CAST_EXPR.
* tree.c (dependent_name): No longer static.
* cp-tree.h: Declare it.
* pt.c (unify): Defer handling of unconverted functions.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_INITIALIZER_LIST, DEMANGLE_COMPONENT_NULLARY.
libiberty/
* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_NULLARY and
DEMANGLE_COMPONENT_INITIALIZER_LIST.
(d_make_comp): Likewise. Allow null right arg for
DEMANGLE_COMPONENT_TRINARY_ARG2.
(cplus_demangle_operators): Adjust new/delete; add .*, :: and throw.
(d_template_args, d_template_arg): Handle 'J' for argument packs.
(d_exprlist): Add terminator parm.
(d_expression, d_print_comp): Handle initializer lists, nullary
expressions, prefix/suffix operators, and new.
(d_print_subexpr): Avoid parens around DEMANGLE_COMPONENT_QUAL_NAME
and DEMANGLE_COMPONENT_INITIALIZER_LIST.
* testsuite/demangle-expected: Add tests.
From-SVN: r182970
2012-01-06 16:39:43 -05:00
|
|
|
_Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_
|
2009-09-29 23:01:30 -04:00
|
|
|
decltype (f(({parm#1}+(1))...)) g<int, double>(int, double)
|
|
|
|
# lambda tests
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZ1giENKUlvE_clEv
|
|
|
|
g(int)::{lambda()#1}::operator()() const
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z4algoIZ1giEUlvE0_EiT_
|
|
|
|
int algo<g(int)::{lambda()#2}>(g(int)::{lambda()#2})
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZN1S1fEiiEd0_NKUlvE0_clEv
|
|
|
|
S::f(int, int)::{default arg#2}::{lambda()#2}::operator()() const
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNK1SIiE1xMUlvE1_clEv
|
|
|
|
S<int>::x::{lambda()#3}::operator()() const
|
|
|
|
--format=gnu-v3
|
2013-02-14 20:26:44 -05:00
|
|
|
_ZN8functionC1IZN1CIiE4testES_Ed_UliE_EET_
|
|
|
|
function::function<C<int>::test(function)::{default arg#1}::{lambda(int)#1}>(C<int>::test(function)::{default arg#1}::{lambda(int)#1})
|
|
|
|
--format=gnu-v3
|
2009-09-29 23:01:30 -04:00
|
|
|
_Z1fN1SUt_E
|
|
|
|
f(S::{unnamed type#1})
|
2010-02-03 15:42:35 -05:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDv32_f
|
2010-03-22 16:38:35 -04:00
|
|
|
f(float __vector(32))
|
2010-02-03 15:42:35 -05:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIfLi4EEvDv_T0__T_
|
2010-03-22 16:38:35 -04:00
|
|
|
void f<float, 4>(float __vector(4))
|
2010-02-04 16:54:31 +00:00
|
|
|
--format=gnu-v3
|
2010-02-03 15:42:48 -05:00
|
|
|
_Z1fI1AEDTclonplfp_fp_EET_
|
|
|
|
decltype ((operator+)({parm#1}, {parm#1})) f<A>(A)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1hI1AEDTcldtfp_miEET_
|
|
|
|
decltype (({parm#1}.(operator-))()) h<A>(A)
|
2010-05-06 16:51:52 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDn
|
|
|
|
f(decltype(nullptr))
|
2010-06-10 17:15:18 +02:00
|
|
|
--format=gnu-v3
|
2011-06-20 10:40:01 -04:00
|
|
|
_Z1fIRiEvOT_b
|
|
|
|
void f<int&>(int&, bool)
|
|
|
|
--format=gnu-v3
|
2010-06-10 17:15:18 +02:00
|
|
|
_ZN5aaaaa6bbbbbb5cccccIN23ddddddddddddddddddddddd3eeeENS2_4ffff16ggggggggggggggggENS0_9hhhhhhhhhES6_S6_S6_S6_S6_S6_S6_EE
|
|
|
|
aaaaa::bbbbbb::ccccc<ddddddddddddddddddddddd::eee, ddddddddddddddddddddddd::ffff::gggggggggggggggg, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh>
|
2011-06-13 22:32:40 +00:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z5outerIsEcPFilE
|
|
|
|
char outer<short>(int (*)(long))
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z5outerPFsiEl
|
|
|
|
outer(short (*)(int), long)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6outer2IsEPFilES1_
|
|
|
|
int (*outer2<short>(int (*)(long)))(long)
|
2011-06-13 22:34:19 +00:00
|
|
|
--format=gnu-v3 --ret-postfix
|
|
|
|
_Z5outerIsEcPFilE
|
|
|
|
outer<short>(int (*)(long))char
|
|
|
|
--format=gnu-v3 --ret-postfix
|
|
|
|
_Z5outerPFsiEl
|
|
|
|
outer(short (*)(int), long)
|
|
|
|
--format=gnu-v3 --ret-postfix
|
|
|
|
_Z6outer2IsEPFilES1_
|
|
|
|
outer2<short>(int (*)(long))int (*)(long)
|
2011-06-13 22:32:40 +00:00
|
|
|
--format=gnu-v3 --ret-drop
|
|
|
|
_Z5outerIsEcPFilE
|
|
|
|
outer<short>(int (*)(long))
|
|
|
|
--format=gnu-v3 --ret-drop
|
|
|
|
_Z5outerPFsiEl
|
|
|
|
outer(short (*)(int), long)
|
|
|
|
--format=gnu-v3 --ret-drop
|
|
|
|
_Z6outer2IsEPFilES1_
|
|
|
|
outer2<short>(int (*)(long))
|
2010-01-11 11:38:35 +00:00
|
|
|
#
|
2011-07-01 17:16:44 +00:00
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZN1KIXadL_ZN1S1mEiEEE1fEv
|
|
|
|
K<&S::m>::f()
|
|
|
|
K<&S::m>::f
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN1KILi1EXadL_ZN1S1mEiEEE1fEv
|
|
|
|
K<1, &S::m>::f()
|
|
|
|
# Here the `(int)' argument list of `S::m' is already removed.
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN1KILi1EXadL_ZN1S1mEEEE1fEv
|
|
|
|
K<1, &S::m>::f()
|
|
|
|
#
|
2011-07-26 14:28:23 +00:00
|
|
|
# Used to crash -- binutils PR 13030.
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
|
|
|
|
_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
|
2012-01-06 16:39:34 -05:00
|
|
|
# A pack expansion is substitutable.
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIJiEiEv1AIJDpT_EET0_S4_
|
|
|
|
void f<int, int>(A<int>, int, int)
|
|
|
|
# So is decltype.
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIiiEDTcvT__EET0_S2_
|
|
|
|
decltype ((int)()) f<int, int>(int, int)
|
|
|
|
# And vector.
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDv4_iS_
|
|
|
|
f(int __vector(4), int __vector(4))
|
re PR c++/6057 (expression mangling doesn't work for operator new)
PR c++/6057
PR c++/48051
PR c++/50855
PR c++/51322
gcc/cp/
* mangle.c (write_expression): Support NEW_EXPR, DELETE_EXPR,
THROW_EXPR, CONSTRUCTOR, OVERLOAD. Fix PREINCREMENT_EXPR and
PREDECREMENT_EXPR.
(write_template_arg): Fix mangling of class-scope functions and
argument packs.
(mangle_decl): Update suggested -fabi-version argument.
* operators.def: Add DOTSTAR_EXPR, REINTERPRET_CAST_EXPR,
DYNAMIC_CAST_EXPR; correct CONST_CAST_EXPR, STATIC_CAST_EXPR.
* tree.c (dependent_name): No longer static.
* cp-tree.h: Declare it.
* pt.c (unify): Defer handling of unconverted functions.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_INITIALIZER_LIST, DEMANGLE_COMPONENT_NULLARY.
libiberty/
* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_NULLARY and
DEMANGLE_COMPONENT_INITIALIZER_LIST.
(d_make_comp): Likewise. Allow null right arg for
DEMANGLE_COMPONENT_TRINARY_ARG2.
(cplus_demangle_operators): Adjust new/delete; add .*, :: and throw.
(d_template_args, d_template_arg): Handle 'J' for argument packs.
(d_exprlist): Add terminator parm.
(d_expression, d_print_comp): Handle initializer lists, nullary
expressions, prefix/suffix operators, and new.
(d_print_subexpr): Avoid parens around DEMANGLE_COMPONENT_QUAL_NAME
and DEMANGLE_COMPONENT_INITIALIZER_LIST.
* testsuite/demangle-expected: Add tests.
From-SVN: r182970
2012-01-06 16:39:43 -05:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_
|
|
|
|
decltype ({parm#1}.*{parm#2}) f1<int, A>(A, int A::*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z2f2IiEDTquL_Z1bEfp_trET_
|
|
|
|
decltype (b?{parm#1} : (throw)) f2<int>(int)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6check1IiEvP6helperIXsznw_T_EEE
|
|
|
|
void check1<int>(helper<sizeof (new int)>*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6check2IiEvP6helperIXszgsnw_T_piEEE
|
|
|
|
void check2<int>(helper<sizeof (::new int())>*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE
|
|
|
|
void check3<int>(helper<sizeof (new (&i) int(1))>*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6check4IiEvP6helperIXszna_A1_T_EEE
|
|
|
|
void check4<int>(helper<sizeof (new int [1])>*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z6check5IiEvP6helperIXszna_A1_T_piEEE
|
|
|
|
void check5<int>(helper<sizeof (new int [1]())>*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIiEDTcmgsdlfp_psfp_EPT_
|
|
|
|
decltype ((::delete {parm#1}),(+{parm#1})) f<int>(int*)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIiEDTcmdafp_psfp_EPT_
|
|
|
|
decltype ((delete[] {parm#1}),(+{parm#1})) f<int>(int*)
|
|
|
|
--format=gnu-v3
|
2012-01-10 12:02:52 -05:00
|
|
|
_ZN1AdlEPv
|
|
|
|
A::operator delete(void*)
|
|
|
|
--format=gnu-v3
|
re PR c++/6057 (expression mangling doesn't work for operator new)
PR c++/6057
PR c++/48051
PR c++/50855
PR c++/51322
gcc/cp/
* mangle.c (write_expression): Support NEW_EXPR, DELETE_EXPR,
THROW_EXPR, CONSTRUCTOR, OVERLOAD. Fix PREINCREMENT_EXPR and
PREDECREMENT_EXPR.
(write_template_arg): Fix mangling of class-scope functions and
argument packs.
(mangle_decl): Update suggested -fabi-version argument.
* operators.def: Add DOTSTAR_EXPR, REINTERPRET_CAST_EXPR,
DYNAMIC_CAST_EXPR; correct CONST_CAST_EXPR, STATIC_CAST_EXPR.
* tree.c (dependent_name): No longer static.
* cp-tree.h: Declare it.
* pt.c (unify): Defer handling of unconverted functions.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_INITIALIZER_LIST, DEMANGLE_COMPONENT_NULLARY.
libiberty/
* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_NULLARY and
DEMANGLE_COMPONENT_INITIALIZER_LIST.
(d_make_comp): Likewise. Allow null right arg for
DEMANGLE_COMPONENT_TRINARY_ARG2.
(cplus_demangle_operators): Adjust new/delete; add .*, :: and throw.
(d_template_args, d_template_arg): Handle 'J' for argument packs.
(d_exprlist): Add terminator parm.
(d_expression, d_print_comp): Handle initializer lists, nullary
expressions, prefix/suffix operators, and new.
(d_print_subexpr): Avoid parens around DEMANGLE_COMPONENT_QUAL_NAME
and DEMANGLE_COMPONENT_INITIALIZER_LIST.
* testsuite/demangle-expected: Add tests.
From-SVN: r182970
2012-01-06 16:39:43 -05:00
|
|
|
_Z2f1IiEDTppfp_ET_
|
|
|
|
decltype ({parm#1}++) f1<int>(int)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z2f1IiEDTpp_fp_ET_
|
|
|
|
decltype (++{parm#1}) f1<int>(int)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z2f1IiEDTcl1gfp_ilEEET_
|
|
|
|
decltype (g({parm#1}, {})) f1<int>(int)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z2f1IiEDTnw_T_ilEES0_
|
|
|
|
decltype (new int{}) f1<int>(int)
|
2012-03-07 18:19:06 -05:00
|
|
|
--format=gnu-v3
|
|
|
|
_Zli2_wPKc
|
|
|
|
operator"" _w(char const*)
|
2012-03-21 00:04:39 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIiEDTnw_Dapifp_EET_
|
|
|
|
decltype (new auto({parm#1})) f<int>(int)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIiERDaRKT_S1_
|
|
|
|
auto& f<int>(int const&, int)
|
2012-07-18 15:51:36 -04:00
|
|
|
--format=gnu-v3
|
2016-12-13 07:16:05 +01:00
|
|
|
_Z1gIiEDcRKT_S0_
|
|
|
|
decltype(auto) g<int>(int const&, int)
|
|
|
|
--format=gnu-v3
|
2012-07-18 15:51:36 -04:00
|
|
|
_Z1gILi1EEvR1AIXT_EER1BIXscbT_EE
|
|
|
|
void g<1>(A<1>&, B<static_cast<bool>(1)>&)
|
2012-11-10 21:11:15 -05:00
|
|
|
--format=gnu-v3
|
|
|
|
_ZNKSt7complexIiE4realB5cxx11Ev
|
|
|
|
std::complex<int>::real[abi:cxx11]() const
|
2011-07-26 14:28:23 +00:00
|
|
|
#
|
2015-07-13 05:49:54 +00:00
|
|
|
# Some more crashes revealed by fuzz-testing:
|
|
|
|
# Check for NULL pointer when demangling trinary operators
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fAv32_f
|
|
|
|
_Z1fAv32_f
|
|
|
|
# Do not overflow when decoding identifier length
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z11111111111
|
|
|
|
_Z11111111111
|
|
|
|
# Check out-of-bounds access when decoding braced initializer list
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZDTtl
|
|
|
|
_ZDTtl
|
|
|
|
# Check for NULL pointer when demangling DEMANGLE_COMPONENT_LOCAL_NAME
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZZN1fEEd_lEv
|
|
|
|
_ZZN1fEEd_lEv
|
|
|
|
# Handle DEMANGLE_COMPONENT_FIXED_TYPE in d_find_pack
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDpDFT_
|
|
|
|
_Z1fDpDFT_
|
|
|
|
# Likewise, DEMANGLE_COMPONENT_DEFAULT_ARG
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fIDpZ1fEd_E
|
|
|
|
_Z1fIDpZ1fEd_E
|
|
|
|
# Likewise, DEMANGLE_COMPONENT_NUMBER
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fDpDv1_c
|
|
|
|
f((char __vector(1))...)
|
|
|
|
#
|
2010-01-11 11:38:35 +00:00
|
|
|
# Ada (GNAT) tests.
|
|
|
|
#
|
|
|
|
# Simple test.
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs
|
|
|
|
yz.qrs
|
|
|
|
# Operator
|
|
|
|
--format=gnat
|
|
|
|
oper__Oadd
|
|
|
|
oper."+"
|
|
|
|
# Overloaded subprogram.
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs__2
|
|
|
|
yz.qrs
|
|
|
|
# Nested subprogram.
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs__tuv.1661
|
|
|
|
yz.qrs.tuv
|
|
|
|
# Nested and overloaded subprograms.
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs__tuv__2_1.1667
|
|
|
|
yz.qrs.tuv
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs__tuv__2_2.1670
|
|
|
|
yz.qrs.tuv
|
|
|
|
--format=gnat
|
|
|
|
yz__qrs__tuv__2_3.1674
|
|
|
|
yz.qrs.tuv
|
|
|
|
# Elaborated flag (not demangled)
|
|
|
|
--format=gnat
|
|
|
|
x_E
|
|
|
|
<x_E>
|
|
|
|
# Nested package
|
|
|
|
--format=gnat
|
|
|
|
x__m1
|
|
|
|
x.m1
|
|
|
|
--format=gnat
|
|
|
|
x__m3
|
|
|
|
x.m3
|
|
|
|
--format=gnat
|
|
|
|
x__y__m2X
|
|
|
|
x.y.m2
|
|
|
|
--format=gnat
|
|
|
|
x__y__z__rXb
|
|
|
|
x.y.z.r
|
|
|
|
# Child package
|
|
|
|
--format=gnat
|
|
|
|
x__y__j
|
|
|
|
x.y.j
|
|
|
|
# Library level
|
|
|
|
--format=gnat
|
|
|
|
_ada_x__m3
|
|
|
|
x.m3
|
|
|
|
# Package body elaborator
|
|
|
|
--format=gnat
|
|
|
|
p___elabb
|
|
|
|
p'Elab_Body
|
|
|
|
# Package spec elaborator
|
|
|
|
--format=gnat
|
|
|
|
p___elabs
|
|
|
|
p'Elab_Spec
|
|
|
|
# Task body
|
|
|
|
--format=gnat
|
|
|
|
p__taskobjTKB
|
|
|
|
p.taskobj
|
|
|
|
# Task subprogram
|
|
|
|
--format=gnat
|
|
|
|
p__taskobjTK__f1.2330
|
|
|
|
p.taskobj.f1
|
|
|
|
# Protected types subprograms
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__getN
|
|
|
|
prot.lock.get
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__getP
|
|
|
|
prot.lock.get
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__get__sub.2590
|
|
|
|
prot.lock.get.sub
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__setN
|
|
|
|
prot.lock.set
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__setP
|
|
|
|
prot.lock.set
|
|
|
|
# Protected type entries
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__update_B7s
|
|
|
|
prot.lock.update
|
|
|
|
--format=gnat
|
|
|
|
prot__lock__update_E6s
|
|
|
|
prot.lock.update
|
2010-09-22 09:26:03 +00:00
|
|
|
# Controlled types
|
|
|
|
--format=gnat
|
|
|
|
gnat__sockets__sockets_library_controllerDF__2
|
|
|
|
gnat.sockets.sockets_library_controller.Finalize
|
|
|
|
--format=gnat
|
|
|
|
system__partition_interface__racw_stub_typeDA
|
|
|
|
system.partition_interface.racw_stub_type.Adjust
|
|
|
|
# Stream operations
|
|
|
|
--format=gnat
|
|
|
|
gnat__wide_wide_string_split__slice_setSR__2
|
|
|
|
gnat.wide_wide_string_split.slice_set'Read
|
|
|
|
--format=gnat
|
|
|
|
ada__real_time__timing_events__events__listSW__2Xnn
|
|
|
|
ada.real_time.timing_events.events.list'Write
|
|
|
|
--format=gnat
|
|
|
|
system__finalization_root__root_controlledSI
|
|
|
|
system.finalization_root.root_controlled'Input
|
|
|
|
--format=gnat
|
|
|
|
ada__finalization__limited_controlledSO__2
|
|
|
|
ada.finalization.limited_controlled'Output
|
|
|
|
# Tagged types
|
|
|
|
--format=gnat
|
|
|
|
ada__synchronous_task_control___size__2
|
|
|
|
ada.synchronous_task_control'Size
|
|
|
|
--format=gnat
|
|
|
|
ada__real_time__timing_events__events___alignment__2Xnn
|
|
|
|
ada.real_time.timing_events.events'Alignment
|
|
|
|
--format=gnat
|
|
|
|
system__finalization_root___assign__2
|
|
|
|
system.finalization_root.":="
|
2010-01-26 04:05:32 +00:00
|
|
|
#
|
|
|
|
# Used to crash the demangler.
|
|
|
|
--format=gnu-v3
|
|
|
|
DFA
|
|
|
|
DFA
|
2010-09-10 22:41:28 +00:00
|
|
|
#
|
|
|
|
# http://sourceware.org/bugzilla/show_bug.cgi?id=11572
|
|
|
|
--format=auto
|
|
|
|
_ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_
|
2020-07-10 09:34:28 -07:00
|
|
|
Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>(VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)
|
2011-09-23 21:39:10 +00:00
|
|
|
#
|
|
|
|
# Clone suffix tests
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5n.clone.1
|
|
|
|
fo5(__int128) [clone .clone.1]
|
|
|
|
fo5
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5n.constprop.2
|
|
|
|
fo5(__int128) [clone .constprop.2]
|
|
|
|
fo5
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5n.isra.3
|
|
|
|
fo5(__int128) [clone .isra.3]
|
|
|
|
fo5
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fo5n.part.4
|
|
|
|
fo5(__int128) [clone .part.4]
|
|
|
|
fo5
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z12to_be_clonediPv.clone.0
|
|
|
|
to_be_cloned(int, void*) [clone .clone.0]
|
|
|
|
to_be_cloned
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooi.1988
|
|
|
|
foo(int) [clone .1988]
|
|
|
|
foo
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooi.part.9.165493.constprop.775.31805
|
|
|
|
foo(int) [clone .part.9.165493] [clone .constprop.775.31805]
|
|
|
|
foo
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z2f1IiEvT_S0_S0_._omp_fn.2
|
|
|
|
void f1<int>(int, int, int) [clone ._omp_fn.2]
|
|
|
|
f1<int>
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_Z3fooi._omp_cpyfn.6
|
|
|
|
foo(int) [clone ._omp_cpyfn.6]
|
|
|
|
foo
|
2011-10-10 20:34:20 +00:00
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
libiberty: support digits in cpp mangled clone names
Currently libiberty fails to demangle the name of cloned functions if
the clone-type-identifier contains numbers.
This can be observed with the following example:
$ cat > ex.cc <<EOT
void foo (float *, float *)
__attribute__((target_clones("avx2,avx,sse4.1,default")));
void foo (float *, float *) {}
EOT
$ gcc -c ex.cc
$ nm -C ex.o | grep foo
0000000000000000 i foo(float*, float*)
0000000000000026 t foo(float*, float*) [clone .avx.1]
0000000000000013 t _Z3fooPfS_.avx2.0
0000000000000000 t foo(float*, float*) [clone .default.3]
0000000000000000 W foo(float*, float*) [clone .resolver]
0000000000000039 t _Z3fooPfS_.sse4_1.2
In this example, gcc creates clones for the FOO function, each matching
one of the specified targets. When inspecting the binary, nm (and other
libiberty-based tools, including gdb) fails to demangle the symbol names
if the clone identifier contains numbers.
Form my understanding of the mangling convention[1], clone names are
part of vendor-specific suffixes and do not have rule preventing them
from containing digits.
This commit proposes to fix the demangling. With this commit (ported to
binutils), nm gives the following output:
$ nm-new -C ex.o | grep foo
0000000000000000 i foo(float*, float*)
0000000000000026 t foo(float*, float*) [clone .avx.1]
0000000000000013 t foo(float*, float*) [clone .avx2.0]
0000000000000000 t foo(float*, float*) [clone .default.3]
0000000000000000 W foo(float*, float*) [clone .resolver]
0000000000000039 t foo(float*, float*) [clone .sse4_1.2]
Tested on x86_86-linux with 'make check-libiberty'.
[1] https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling
libiberty/ChangeLog:
* cp-demangle.c (d_clone_suffix): Support digits in clone tag
names.
* testsuite/demangle-expected: Check demangling of clone symbols
with digits in name.
2021-12-30 11:36:52 -05:00
|
|
|
_Z3fooPfS_S_j.sse4_1.2
|
|
|
|
foo(float*, float*, float*, unsigned int) [clone .sse4_1.2]
|
|
|
|
foo
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
2011-10-10 20:34:20 +00:00
|
|
|
_Z1fIKFvvES0_Evv
|
2013-04-03 20:14:00 -04:00
|
|
|
void f<void () const, void () const>()
|
|
|
|
f<void () const, void () const>
|
2012-05-22 13:55:02 +00:00
|
|
|
#
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_
|
2020-07-10 09:34:28 -07:00
|
|
|
modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >::InputType, modc::parser::MaybeRef<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::parser::OptionalParser<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> >, false> >::Type> modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> >, modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > >, modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::parser::OptionalParser<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc:
|
2013-04-03 13:24:12 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_ZNKR1A1hEv
|
|
|
|
A::h() const &
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1lM1AKFvvRE
|
|
|
|
l(void (A::*)() const &)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1mIFvvOEEvM1AT_
|
|
|
|
void m<void () &&>(void (A::*)() &&)
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z1nIM1AKFvvREEvT_
|
|
|
|
void n<void (A::*)() const &>(void (A::*)() const &)
|
2013-10-11 17:31:18 -07:00
|
|
|
--format=gnu-v3
|
|
|
|
_ZL1fIiEvv
|
|
|
|
void f<int>()
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c3
|
2013-10-25 13:56:51 +00:00
|
|
|
--format=gnu-v3
|
|
|
|
_ZSt7forwardIRN1x14refobjiteratorINS0_3refINS0_4mime30multipart_section_processorObjIZ15get_body_parserIZZN14mime_processor21make_section_iteratorERKNS2_INS3_10sectionObjENS0_10ptrrefBaseEEEbENKUlvE_clEvEUlSB_bE_ZZNS6_21make_section_iteratorESB_bENKSC_clEvEUlSB_E0_ENS1_INS2_INS0_20outputrefiteratorObjIiEES8_EEEERKSsSB_OT_OT0_EUlmE_NS3_32make_multipart_default_discarderISP_EEEES8_EEEEEOT_RNSt16remove_referenceISW_E4typeE
|
2020-07-10 09:34:28 -07:00
|
|
|
x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}> >, x::ptrrefBase> >& std::forward<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}> >, x::ptrrefBase> >&>(std::remove_reference<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::
|
2013-11-22 22:25:49 +00:00
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZNK7strings8internal8SplitterINS_9delimiter5AnyOfENS_9SkipEmptyEEcvT_ISt6vectorI12basic_stringIcSt11char_traitsIcESaIcEESaISD_EEvEEv
|
|
|
|
strings::internal::Splitter<strings::delimiter::AnyOf, strings::SkipEmpty>::operator std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > ><std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>() const
|
|
|
|
strings::internal::Splitter<strings::delimiter::AnyOf, strings::SkipEmpty>::operator std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > ><std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZN1AcvT_I1CEEv
|
|
|
|
A::operator C<C>()
|
|
|
|
A::operator C<C>
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZN1AcvPT_I1CEEv
|
|
|
|
A::operator C*<C>()
|
|
|
|
A::operator C*<C>
|
|
|
|
#
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZN1AcvT_IiEI1CEEv
|
|
|
|
A::operator C<int><C>()
|
|
|
|
A::operator C<int><C>
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c16
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZN3mdr16in_cached_threadIRZNK4cudr6GPUSet17parallel_for_eachIZN5tns3d20shape_representation7compute7GPUImpl7executeERKNS_1AINS_7ptr_refIKjEELl3ELl3ENS_8c_strideILl1ELl0EEEEERKNS8_INS9_IjEELl4ELl1ESD_EEEUliRKNS1_7ContextERNS7_5StateEE_JSt6vectorISO_SaISO_EEEEEvOT_DpRT0_EUlSP_E_JSt17reference_wrapperISO_EEEENS_12ScopedFutureIDTclfp_spcl7forwardISW_Efp0_EEEEESV_DpOSW_
|
2020-07-10 09:34:28 -07:00
|
|
|
mdr::ScopedFuture<decltype ({parm#1}((forward<std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >)({parm#2})))> mdr::in_cached_thread<cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&&)
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c18
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSt9_Any_data9_M_accessIPZN13ThreadManager10futureTaskISt5_BindIFSt7_Mem_fnIM6RunnerFvvEEPS5_EEEEvOT_EUlvE_EERSC_v
|
2017-09-26 02:38:12 +00:00
|
|
|
ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)>&&)::{lambda()#1}*& std::_Any_data::_M_access<ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)>&&)::{lambda()#1}*&&)::{lambda()#1}*>()
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c24
|
|
|
|
# aka https://sourceware.org/bugzilla/show_bug.cgi?id=16593
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSt9_Any_data9_M_accessIPZN3sel8Selector6SetObjI3FooJPKcMS4_FviEEEEvRT_DpT0_EUlvE_EESA_v
|
2017-09-26 02:38:12 +00:00
|
|
|
sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*& std::_Any_data::_M_access<sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*&, char const*, void (Foo::*)(int))::{lambda()#1}*>()
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c1
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSt9_Any_data9_M_accessIPZN13ThreadManager7newTaskIRSt5_BindIFSt7_Mem_fnIM5DiaryFivEEPS5_EEIEEESt6futureINSt9result_ofIFT_DpT0_EE4typeEEOSF_DpOSG_EUlvE_EERSF_v
|
2017-09-26 02:38:12 +00:00
|
|
|
ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&)::{lambda()#1}*& std::_Any_data::_M_access<ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&)::{lambda()#1}*&&)::{lambda()#1}*>()
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c6
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSt9_Any_data9_M_accessIPZN6cereal18polymorphic_detail15getInputBindingINS1_16JSONInputArchiveEEENS1_6detail15InputBindingMapIT_E11SerializersERS7_jEUlPvRSt10unique_ptrIvNS5_12EmptyDeleterIvEEEE0_EESA_v
|
2017-09-26 02:38:12 +00:00
|
|
|
cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*& std::_Any_data::_M_access<cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*>()
|
2014-05-08 09:13:44 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=16845#c2
|
|
|
|
--format=gnu-v3
|
|
|
|
_ZNSt9_Any_data9_M_accessIPZ4postISt8functionIFvvEEEvOT_EUlvE_EERS5_v
|
2017-09-26 02:38:12 +00:00
|
|
|
post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*& std::_Any_data::_M_access<post<std::function<void ()> >(post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*&&)::{lambda()#1}*>()
|
2014-08-29 19:30:10 +00:00
|
|
|
#
|
|
|
|
--format=auto --no-params
|
c++: Implement P1467R9 - Extended floating-point types and standard names compiler part except for bfloat16 [PR106652]
The following patch implements the compiler part of C++23
P1467R9 - Extended floating-point types and standard names compiler part
by introducing _Float{16,32,64,128} as keywords and builtin types
like they are implemented for C already since GCC 7, with DF{16,32,64,128}_
mangling.
It also introduces _Float{32,64,128}x for C++ with the
https://github.com/itanium-cxx-abi/cxx-abi/pull/147
proposed mangling of DF{32,64,128}x.
The patch doesn't add anything for bfloat16_t support, as right now
__bf16 type refuses all conversions and arithmetic operations.
The patch wants to keep backwards compatibility with how __float128 has
been handled in C++ before, both for mangling and behavior in binary
operations, overload resolution etc. So, there are some backend changes
where for C __float128 and _Float128 are the same type (float128_type_node
and float128t_type_node are the same pointer), but for C++ they are distinct
types which mangle differently and _Float128 is treated as extended
floating-point type while __float128 is treated as non-standard floating
point type. The various C++23 changes about how floating-point types
are changed are actually implemented as written in the spec only if at least
one of the types involved is _Float{16,32,64,128,32x,64x,128x} (_FloatNx are
also treated as extended floating-point types) and kept previous behavior
otherwise. For float/double/long double the rules are actually written that
they behave the same as before.
There is some backwards incompatibility at least on x86 regarding _Float16,
because that type was already used by that name and with the DF16_ mangling
(but only since GCC 12 and I think it isn't that widely used in the wild
yet). E.g. config/i386/avx512fp16intrin.h shows the issues, where
in C or in GCC 12 in C++ one could pass 0.0f to a builtin taking _Float16
argument, but with the changes that is not possible anymore, one needs
to either use 0.0f16 or (_Float16) 0.0f.
We have also a problem with glibc headers, where since glibc 2.27
math.h and complex.h aren't compilable with these changes. One gets
errors like:
In file included from /usr/include/math.h:43,
from abc.c:1:
/usr/include/bits/floatn.h:86:9: error: multiple types in one declaration
86 | typedef __float128 _Float128;
| ^~~~~~~~~~
/usr/include/bits/floatn.h:86:20: error: declaration does not declare anything [-fpermissive]
86 | typedef __float128 _Float128;
| ^~~~~~~~~
In file included from /usr/include/bits/floatn.h:119:
/usr/include/bits/floatn-common.h:214:9: error: multiple types in one declaration
214 | typedef float _Float32;
| ^~~~~
/usr/include/bits/floatn-common.h:214:15: error: declaration does not declare anything [-fpermissive]
214 | typedef float _Float32;
| ^~~~~~~~
/usr/include/bits/floatn-common.h:251:9: error: multiple types in one declaration
251 | typedef double _Float64;
| ^~~~~~
/usr/include/bits/floatn-common.h:251:16: error: declaration does not declare anything [-fpermissive]
251 | typedef double _Float64;
| ^~~~~~~~
This is from snippets like:
/* The remaining of this file provides support for older compilers. */
# if __HAVE_FLOAT128
/* The type _Float128 exists only since GCC 7.0. */
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef __float128 _Float128;
# endif
where it hardcodes that C++ doesn't have _Float{16,32,64,128,32x,64x,128x} support nor
{f,F}{16,32,64,128}{,x} literal suffixes nor _Complex _Float{16,32,64,128,32x,64x,128x}.
The patch fixincludes this for now and hopefully if this is committed, then
glibc can change those. The patch changes those
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
conditions to
# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
Another thing is mangling, as said above, Itanium C++ ABI specifies
DF <number> _ as _Float{16,32,64,128} mangling, but GCC was implementing
a mangling incompatible with that starting with DF for fixed point types.
Fixed point was never supported in C++ though, I believe the reason why
the mangling has been added was that due to a bug it would leak into the
C++ FE through decltype (0.0r) etc. But that has been shortly after the
mangling was added fixed (I think in the same GCC release cycle), so we
now reject 0.0r etc. in C++. If we ever need the fixed point mangling,
I think it can be readded but better with a different prefix so that it
doesn't conflict with the published standard manglings. So, this patch
also kills the fixed point mangling and implements the DF <number> _
demangling.
The patch predefines __STDCPP_FLOAT{16,32,64,128}_T__ macros when
those types are available, but only for C++23, while the underlying types
are available in C++98 and later including the {f,F}{16,32,64,128} literal
suffixes (but those with a pedwarn for C++20 and earlier). My understanding
is that it needs to be predefined by the compiler, on the other side
predefining even for older modes when <stdfloat> is a new C++23 header
would be weird. One can find out if _Float{16,32,64,128,32x,64x,128x} is
supported in C++ by
__GNUC__ >= 13 && defined(__FLT{16,32,64,128,32X,64X,128X}_MANT_DIG__)
(but that doesn't work well with older G++ 13 snapshots).
As for std::bfloat16_t, three targets (aarch64, arm and x86) apparently
"support" __bf16 type which has the bfloat16 format, but isn't really
usable, e.g. {aarch64,arm,ix86}_invalid_conversion disallow any conversions
from or to type with BFmode, {aarch64,arm,ix86}_invalid_unary_op disallows
any unary operations on those except for ADDR_EXPR and
{aarch64,arm,ix86}_invalid_binary_op disallows any binary operation on
those. So, I think we satisfy:
"If the implementation supports an extended floating-point type with the
properties, as specified by ISO/IEC/IEEE 60559, of radix (b) of 2, storage
width in bits (k) of 16, precision in bits (p) of 8, maximum exponent (emax)
of 127, and exponent field width in bits (w) of 8, then the typedef-name
std::bfloat16_t is defined in the header <stdfloat> and names such a type,
the macro __STDCPP_BFLOAT16_T__ is defined, and the floating-point literal
suffixes bf16 and BF16 are supported."
because we don't really support those right now.
2022-09-27 Jakub Jelinek <jakub@redhat.com>
PR c++/106652
PR c++/85518
gcc/
* tree-core.h (enum tree_index): Add TI_FLOAT128T_TYPE
enumerator.
* tree.h (float128t_type_node): Define.
* tree.cc (build_common_tree_nodes): Initialize float128t_type_node.
* builtins.def (DEF_FLOATN_BUILTIN): Adjust comment now that
_Float<N> is supported in C++ too.
* config/i386/i386.cc (ix86_mangle_type): Only mangle as "g"
float128t_type_node.
* config/i386/i386-builtins.cc (ix86_init_builtin_types): Use
float128t_type_node for __float128 instead of float128_type_node
and create it if NULL.
* config/i386/avx512fp16intrin.h (_mm_setzero_ph, _mm256_setzero_ph,
_mm512_setzero_ph, _mm_set_sh, _mm_load_sh): Use 0.0f16 instead of
0.0f.
* config/ia64/ia64.cc (ia64_init_builtins): Use
float128t_type_node for __float128 instead of float128_type_node
and create it if NULL.
* config/rs6000/rs6000-c.cc (is_float128_p): Also return true
for float128t_type_node if non-NULL.
* config/rs6000/rs6000.cc (rs6000_mangle_type): Don't mangle
float128_type_node as "u9__ieee128".
* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Use
float128t_type_node for __float128 instead of float128_type_node
and create it if NULL.
gcc/c-family/
* c-common.cc (c_common_reswords): Change _Float{16,32,64,128} and
_Float{32,64,128}x flags from D_CONLY to 0.
(shorten_binary_op): Punt if common_type returns error_mark_node.
(shorten_compare): Likewise.
(c_common_nodes_and_builtins): For C++ record _Float{16,32,64,128}
and _Float{32,64,128}x builtin types if available. For C++
clear float128t_type_node.
* c-cppbuiltin.cc (c_cpp_builtins): Predefine
__STDCPP_FLOAT{16,32,64,128}_T__ for C++23 if supported.
* c-lex.cc (interpret_float): For q/Q suffixes prefer
float128t_type_node over float128_type_node. Allow
{f,F}{16,32,64,128} suffixes for C++ if supported with pedwarn
for C++20 and older. Allow {f,F}{32,64,128}x suffixes for C++
with pedwarn. Don't call excess_precision_type for C++.
gcc/cp/
* cp-tree.h (cp_compare_floating_point_conversion_ranks): Implement
P1467R9 - Extended floating-point types and standard names except
for std::bfloat16_t for now. Declare.
(extended_float_type_p): New inline function.
* mangle.cc (write_builtin_type): Mangle float{16,32,64,128}_type_node
as DF{16,32,64,128}_. Mangle float{32,64,128}x_type_node as
DF{32,64,128}x. Remove FIXED_POINT_TYPE mangling that conflicts
with that.
* typeck2.cc (check_narrowing): If one of ftype or type is extended
floating-point type, compare floating-point conversion ranks.
* parser.cc (cp_keyword_starts_decl_specifier_p): Handle
CASE_RID_FLOATN_NX.
(cp_parser_simple_type_specifier): Likewise and diagnose missing
_Float<N> or _Float<N>x support if not supported by target.
* typeck.cc (cp_compare_floating_point_conversion_ranks): New function.
(cp_common_type): If both types are REAL_TYPE and one or both are
extended floating-point types, select common type based on comparison
of floating-point conversion ranks and subranks.
(cp_build_binary_op): Diagnose operation with floating point arguments
with unordered conversion ranks.
* call.cc (standard_conversion): For floating-point conversion, if
either from or to are extended floating-point types, set conv->bad_p
for implicit conversion from larger to smaller conversion rank or
with unordered conversion ranks.
(convert_like_internal): Emit a pedwarn on such conversions.
(build_conditional_expr): Diagnose operation with floating point
arguments with unordered conversion ranks.
(convert_arg_to_ellipsis): Don't promote extended floating-point types
narrower than double to double.
(compare_ics): Implement P1467R9 [over.ics.rank]/4 changes.
gcc/testsuite/
* g++.dg/cpp23/ext-floating1.C: New test.
* g++.dg/cpp23/ext-floating2.C: New test.
* g++.dg/cpp23/ext-floating3.C: New test.
* g++.dg/cpp23/ext-floating4.C: New test.
* g++.dg/cpp23/ext-floating5.C: New test.
* g++.dg/cpp23/ext-floating6.C: New test.
* g++.dg/cpp23/ext-floating7.C: New test.
* g++.dg/cpp23/ext-floating8.C: New test.
* g++.dg/cpp23/ext-floating9.C: New test.
* g++.dg/cpp23/ext-floating10.C: New test.
* g++.dg/cpp23/ext-floating.h: New file.
* g++.target/i386/float16-1.C: Adjust expected diagnostics.
libcpp/
* expr.cc (interpret_float_suffix): Allow {f,F}{16,32,64,128} and
{f,F}{32,64,128}x suffixes for C++.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
(struct demangle_component): Add u.s_extended_builtin member.
libiberty/
* cp-demangle.c (d_dump): Handle
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE. Don't handle
DEMANGLE_COMPONENT_FIXED_TYPE.
(d_make_extended_builtin_type): New function.
(cplus_demangle_builtin_types): Add _Float entry.
(cplus_demangle_type): For DF demangle it as _Float<N> or
_Float<N>x rather than fixed point which conflicts with it.
(d_count_templates_scopes): Handle
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE. Just break; for
DEMANGLE_COMPONENT_FIXED_TYPE.
(d_find_pack): Handle DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
Don't handle DEMANGLE_COMPONENT_FIXED_TYPE.
(d_print_comp_inner): Likewise.
* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Bump.
* testsuite/demangle-expected: Replace _Z3xxxDFyuVb test
with _Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb. Add
_Z3xxxDF32xDF64xDF128xCDF32xVb test.
fixincludes/
* inclhack.def (glibc_cxx_floatn_1, glibc_cxx_floatn_2,
glibc_cxx_floatn_3): New fixes.
* tests/base/bits/floatn.h: New file.
* fixincl.x: Regenerated.
2022-09-27 08:04:06 +02:00
|
|
|
_Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb
|
|
|
|
xxx(_Float16, _Float32, _Float64, _Float128, _Float16 _Complex, bool volatile)
|
|
|
|
xxx
|
|
|
|
--format=auto --no-params
|
|
|
|
_Z3xxxDF32xDF64xDF128xCDF32xVb
|
|
|
|
xxx(_Float32x, _Float64x, _Float128x, _Float32x _Complex, bool volatile)
|
2014-08-29 19:30:10 +00:00
|
|
|
xxx
|
middle-end, c++, i386, libgcc: std::bfloat16_t and __bf16 arithmetic support
Here is a complete patch to add std::bfloat16_t support on
x86 (AArch64 and ARM left for later). Almost no BFmode optabs
are added by the patch, so for binops/unops it extends to SFmode
first and then truncates back to BFmode.
For {HF,SF,DF,XF,TF}mode -> BFmode conversions libgcc has implementations
of all those conversions so that we avoid double rounding, for
BFmode -> {DF,XF,TF}mode conversions to avoid growing libgcc too much
it emits BFmode -> SFmode conversion first and then converts to the even
wider mode, neither step should be imprecise.
For BFmode -> HFmode, it first emits a precise BFmode -> SFmode conversion
and then SFmode -> HFmode, because neither format is subset or superset
of the other, while SFmode is superset of both.
expr.cc then contains a -ffast-math optimization of the BF -> SF and
SF -> BF conversions if we don't optimize for space (and for the latter
if -frounding-math isn't enabled either).
For x86, perhaps truncsfbf2 optab could be defined for TARGET_AVX512BF16
but IMNSHO should FAIL if !flag_finite_math || flag_rounding_math
|| !flag_unsafe_math_optimizations, because I think the insn doesn't
raise on sNaNs, hardcodes round to nearest and flushes denormals to zero.
By default (unless x86 -fexcess-precision=16) we use float excess
precision for BFmode, so truncate only on explicit casts and assignments.
The patch introduces a single __bf16 builtin - __builtin_nansf16b,
because (__bf16) __builtin_nansf ("") will drop the sNaN into qNaN,
and uses f16b suffix instead of bf16 because there would be ambiguity on
log vs. logb - __builtin_logbf16 could be either log with bf16 suffix
or logb with f16 suffix. In other cases libstdc++ should mostly use
__builtin_*f for std::bfloat16_t overloads (we have a problem with
std::nextafter though but that one we have also for std::float16_t).
2022-10-14 Jakub Jelinek <jakub@redhat.com>
gcc/
* tree-core.h (enum tree_index): Add TI_BFLOAT16_TYPE.
* tree.h (bfloat16_type_node): Define.
* tree.cc (excess_precision_type): Promote bfloat16_type_mode
like float16_type_mode.
(build_common_tree_nodes): Initialize bfloat16_type_node if
BFmode is supported.
* expmed.h (maybe_expand_shift): Declare.
* expmed.cc (maybe_expand_shift): No longer static.
* expr.cc (convert_mode_scalar): Don't ICE on BF -> HF or HF -> BF
conversions. If there is no optab, handle BF -> {DF,XF,TF,HF}
conversions as separate BF -> SF -> {DF,XF,TF,HF} conversions, add
-ffast-math generic implementation for BF -> SF and SF -> BF
conversions.
* builtin-types.def (BT_BFLOAT16, BT_FN_BFLOAT16_CONST_STRING): New.
* builtins.def (BUILT_IN_NANSF16B): New builtin.
* fold-const-call.cc (fold_const_call): Handle CFN_BUILT_IN_NANSF16B.
* config/i386/i386.cc (classify_argument): Handle E_BCmode.
(ix86_libgcc_floating_mode_supported_p): Also return true for BFmode
for -msse2.
(ix86_mangle_type): Mangle BFmode as DF16b.
(ix86_invalid_conversion, ix86_invalid_unary_op,
ix86_invalid_binary_op): Remove.
(TARGET_INVALID_CONVERSION, TARGET_INVALID_UNARY_OP,
TARGET_INVALID_BINARY_OP): Don't redefine.
* config/i386/i386-builtins.cc (ix86_bf16_type_node): Remove.
(ix86_register_bf16_builtin_type): Use bfloat16_type_node rather than
ix86_bf16_type_node, only create it if still NULL.
* config/i386/i386-builtin-types.def (BFLOAT16): Likewise.
* config/i386/i386.md (cbranchbf4, cstorebf4): New expanders.
gcc/c-family/
* c-cppbuiltin.cc (c_cpp_builtins): If bfloat16_type_node,
predefine __BFLT16_*__ macros and for C++23 also
__STDCPP_BFLOAT16_T__. Predefine bfloat16_type_node related
macros for -fbuilding-libgcc.
* c-lex.cc (interpret_float): Handle CPP_N_BFLOAT16.
gcc/c/
* c-typeck.cc (convert_arguments): Don't promote __bf16 to
double.
gcc/cp/
* cp-tree.h (extended_float_type_p): Return true for
bfloat16_type_node.
* typeck.cc (cp_compare_floating_point_conversion_ranks): Set
extended{1,2} if mv{1,2} is bfloat16_type_node. Adjust comment.
gcc/testsuite/
* lib/target-supports.exp (check_effective_target_bfloat16,
check_effective_target_bfloat16_runtime, add_options_for_bfloat16):
New.
* gcc.dg/torture/bfloat16-basic.c: New test.
* gcc.dg/torture/bfloat16-builtin.c: New test.
* gcc.dg/torture/bfloat16-builtin-issignaling-1.c: New test.
* gcc.dg/torture/bfloat16-complex.c: New test.
* gcc.dg/torture/builtin-issignaling-1.c: Allow to be includable
from bfloat16-builtin-issignaling-1.c.
* gcc.dg/torture/floatn-basic.h: Allow to be includable from
bfloat16-basic.c.
* gcc.target/i386/vect-bfloat16-typecheck_2.c: Adjust expected
diagnostics.
* gcc.target/i386/sse2-bfloat16-scalar-typecheck.c: Likewise.
* gcc.target/i386/vect-bfloat16-typecheck_1.c: Likewise.
* g++.target/i386/bfloat_cpp_typecheck.C: Likewise.
libcpp/
* include/cpplib.h (CPP_N_BFLOAT16): Define.
* expr.cc (interpret_float_suffix): Handle bf16 and BF16 suffixes for
C++.
libgcc/
* config/i386/t-softfp (softfp_extensions): Add bfsf.
(softfp_truncations): Add tfbf xfbf dfbf sfbf hfbf.
(CFLAGS-extendbfsf2.c, CFLAGS-truncsfbf2.c, CFLAGS-truncdfbf2.c,
CFLAGS-truncxfbf2.c, CFLAGS-trunctfbf2.c, CFLAGS-trunchfbf2.c): Add
-msse2.
* config/i386/libgcc-glibc.ver (GCC_13.0.0): Export
__extendbfsf2 and __trunc{s,d,x,t,h}fbf2.
* config/i386/sfp-machine.h (_FP_NANSIGN_B): Define.
* config/i386/64/sfp-machine.h (_FP_NANFRAC_B): Define.
* config/i386/32/sfp-machine.h (_FP_NANFRAC_B): Define.
* soft-fp/brain.h: New file.
* soft-fp/truncsfbf2.c: New file.
* soft-fp/truncdfbf2.c: New file.
* soft-fp/truncxfbf2.c: New file.
* soft-fp/trunctfbf2.c: New file.
* soft-fp/trunchfbf2.c: New file.
* soft-fp/truncbfhf2.c: New file.
* soft-fp/extendbfsf2.c: New file.
libiberty/
* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Increment.
* cp-demangle.c (cplus_demangle_builtin_types): Add std::bfloat16_t
entry.
(cplus_demangle_type): Demangle DF16b.
* testsuite/demangle-expected (_Z3xxxDF16b): New test.
2022-10-14 09:37:01 +02:00
|
|
|
--format=auto --no-params
|
|
|
|
_Z3xxxDF16b
|
|
|
|
xxx(std::bfloat16_t)
|
|
|
|
xxx
|
2014-05-14 14:18:49 +00:00
|
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=16817
|
|
|
|
--format=auto --no-params
|
|
|
|
_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
|
|
|
|
_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
|
2014-05-22 13:56:45 +02:00
|
|
|
_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
|
2014-09-26 15:57:37 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fSsB3fooS_
|
|
|
|
f(std::string[abi:foo], std::string[abi:foo])
|
2015-06-01 22:28:19 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z18IndirectExternCallIPU7stdcallU7regparmILi3EEFviiEiEvT_T0_S3_
|
|
|
|
void IndirectExternCall<void ( regparm<3> stdcall*)(int, int), int>(void ( regparm<3> stdcall*)(int, int), int, void ( regparm<3> stdcall*)(int, int))
|
2015-08-15 13:23:30 +00:00
|
|
|
#
|
|
|
|
# ABI tags used to confuse the constructor name calculation.
|
|
|
|
--format=gnu-v3 --no-params
|
|
|
|
_ZNSt8ios_base7failureB5cxx11C1EPKcRKSt10error_code
|
|
|
|
std::ios_base::failure[abi:cxx11]::failure(char const*, std::error_code const&)
|
|
|
|
std::ios_base::failure[abi:cxx11]::failure
|
Implement N4514, C++ Extensions for Transactional Memory.
gcc/
* builtins.def (BUILT_IN_ABORT): Add transaction_pure attribute.
gcc/c-family/
* c-common.c (c_common_reswords): Add C++ TM TS keywords.
(c_common_attribute_table): Add transaction_safe_dynamic.
transaction_safe now affects type identity.
(handle_tm_attribute): Handle transaction_safe_dynamic.
* c-common.h (enum rid): Add RID_ATOMIC_NOEXCEPT,
RID_ATOMIC_CANCEL, RID_SYNCHRONIZED.
(OBJC_IS_CXX_KEYWORD): Add RID_SYNCHRONIZED.
(D_TRANSMEM): New.
* c-cppbuiltin.c (c_cpp_builtins): Define __cpp_transactional_memory.
* c-pretty-print.c (pp_c_attributes_display): Don't print
transaction_safe in C++.
gcc/c/
* c-parser.c (c_lex_one_token): Handle @synchronized.
* c-decl.c (match_builtin_function_types): A declaration of a built-in
can change whether the function is transaction_safe.
gcc/cp/
* cp-tree.h (struct cp_declarator): Add tx_qualifier field.
(BCS_NORMAL, BCS_TRANSACTION): New enumerators.
* lex.c (init_reswords): Limit TM kewords to -fgnu-tm.
* parser.c (cp_lexer_get_preprocessor_token): Fix @synchronized.
(make_call_declarator): Take tx_qualifier.
(cp_parser_tx_qualifier_opt): New.
(cp_parser_lambda_declarator_opt): Use it.
(cp_parser_direct_declarator): Likewise.
(cp_parser_statement): Handle atomic_noexcept, atomic_cancel.
(cp_parser_compound_statement): Change in_try parameter to bcs_flags.
(cp_parser_std_attribute): Map optimize_for_synchronized to
transaction_callable.
(cp_parser_transaction): Take the token. Handle atomic_noexcept.
* lambda.c (maybe_add_lambda_conv_op): Handle transaction-safety.
* call.c (enum conversion_kind): Add ck_tsafe.
(standard_conversion): Handle transaction-safety conversion.
(convert_like_real, resolve_address_of_overloaded_function): Likewise.
(check_methods): Diagnose transaction_safe_dynamic on non-virtual
function.
(look_for_tm_attr_overrides): Don't inherit transaction_safe_dynamic.
* cvt.c (tx_safe_fn_type_p, tx_unsafe_fn_variant)
(can_convert_tx_safety): New.
* typeck.c (composite_pointer_type): Handle transaction-safety.
* name-lookup.h (enum scope_kind): Add sk_transaction.
* name-lookup.c (begin_scope): Handle it.
* semantics.c (begin_compound_stmt): Pass it.
* decl.c (check_previous_goto_1): Check it.
(struct named_label_entry): Add in_transaction_scope.
(poplevel_named_label_1): Set it.
(check_goto): Check it.
(duplicate_decls): A specialization can be transaction_safe
independently of its template.
(grokdeclarator): Handle tx-qualifier.
* rtti.c (ptr_initializer): Handle transaction-safe.
* search.c (check_final_overrider): Check transaction_safe_dynamic.
Don't check transaction_safe.
* mangle.c (write_function_type): Mangle transaction_safe here.
(write_CV_qualifiers_for_type): Not here.
(write_type): Preserve transaction_safe when stripping attributes.
* error.c (dump_type_suffix): Print transaction_safe.
libiberty/
* cp-demangle.c (d_cv_qualifiers): Dx means transaction_safe.
(cplus_demangle_type): Let d_cv_qualifiers handle it.
(d_dump, d_make_comp, has_return_type, d_encoding)
(d_count_templates_scopes, d_print_comp_inner)
(d_print_mod_list, d_print_mod, d_print_function_type)
(is_ctor_or_dtor): Handle DEMANGLE_COMPONENT_TRANSACTION_SAFE.
From-SVN: r228462
2015-10-04 15:17:19 -04:00
|
|
|
--format=gnu-v3
|
|
|
|
_Z1fPDxFvvES0_
|
|
|
|
f(void (*)() transaction_safe, void (*)() transaction_safe)
|
PR other/61321 - demangler crash on casts in template parameters
The fix for bug 59195:
[C++ demangler handles conversion operator incorrectly]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59195
unfortunately makes the demangler crash due to infinite recursion, in
case of casts in template parameters.
For example, with:
template<int> struct A {};
template <typename Y> void function_temp(A<sizeof ((Y)(999))>) {}
template void function_temp<int>(A<sizeof (int)>);
The 'function_temp<int>' instantiation above mangles to:
_Z13function_tempIiEv1AIXszcvT_Li999EEE
The demangler parses this as:
typed name
template
name 'function_temp'
template argument list
builtin type int
function type
builtin type void
argument list
template (*)
name 'A'
template argument list
unary operator
operator sizeof
unary operator
cast
template parameter 0 (**)
literal
builtin type int
name '999'
And after the fix for 59195, due to:
static void
d_print_cast (struct d_print_info *dpi, int options,
const struct demangle_component *dc)
{
...
/* For a cast operator, we need the template parameters from
the enclosing template in scope for processing the type. */
if (dpi->current_template != NULL)
{
dpt.next = dpi->templates;
dpi->templates = &dpt;
dpt.template_decl = dpi->current_template;
}
when printing the template argument list of A (what should be "<sizeof
(int)>"), the template parameter 0 (that is, "T_", the '**' above) now
refers to the first parameter of the the template argument list of the
'A' template (the '*' above), exactly what we were already trying to
print. This leads to infinite recursion, and stack exaustion. The
template parameter 0 should actually refer to the first parameter of
the 'function_temp' template.
Where it reads "for the cast operator" in the comment in d_print_cast
(above), it's really talking about a conversion operator, like:
struct A { template <typename U> explicit operator U(); };
We don't want to inject the template parameters from the enclosing
template in scope when processing a cast _expression_, only when
handling a conversion operator.
The problem is that DEMANGLE_COMPONENT_CAST is currently ambiguous,
and means _both_ 'conversion operator' and 'cast expression'.
Fix this by adding a new DEMANGLE_COMPONENT_CONVERSION component type,
which does what DEMANGLE_COMPONENT_CAST does today, and making
DEMANGLE_COMPONENT_CAST just simply print its component subtree.
I think we could instead reuse DEMANGLE_COMPONENT_CAST and in
d_print_comp_inner still do:
@@ -5001,9 +5013,9 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
d_print_comp (dpi, options, dc->u.s_extended_operator.name);
return;
case DEMANGLE_COMPONENT_CAST:
d_append_string (dpi, "operator ");
- d_print_cast (dpi, options, dc);
+ d_print_conversion (dpi, options, dc);
return;
leaving the unary cast case below calling d_print_cast, but seems to
me that spliting the component types makes it easier to reason about
the code.
g++'s testsuite actually generates three symbols that crash the
demangler in the same way. I've added those as tests in the demangler
testsuite as well.
And then this fixes PR other/61233 too, which happens to be a
demangler crash originally reported to GDB, at:
https://sourceware.org/bugzilla/show_bug.cgi?id=16957
Bootstrapped and regtested on x86_64 Fedora 20.
Also ran this through GDB's testsuite. GDB will require a small
update to use DEMANGLE_COMPONENT_CONVERSION in one place it's using
DEMANGLE_COMPONENT_CAST in its sources.
libiberty/
2015-11-27 Pedro Alves <palves@redhat.com>
PR other/61321
PR other/61233
* demangle.h (enum demangle_component_type)
<DEMANGLE_COMPONENT_CONVERSION>: New value.
* cp-demangle.c (d_demangle_callback, d_make_comp): Handle
DEMANGLE_COMPONENT_CONVERSION.
(is_ctor_dtor_or_conversion): Handle DEMANGLE_COMPONENT_CONVERSION
instead of DEMANGLE_COMPONENT_CAST.
(d_operator_name): Return a DEMANGLE_COMPONENT_CONVERSION
component if handling a conversion.
(d_count_templates_scopes, d_print_comp_inner): Handle
DEMANGLE_COMPONENT_CONVERSION.
(d_print_comp_inner): Handle DEMANGLE_COMPONENT_CONVERSION instead
of DEMANGLE_COMPONENT_CAST.
(d_print_cast): Rename as ...
(d_print_conversion): ... this. Adjust comments.
(d_print_cast): Rewrite - simply print the left subcomponent.
* cp-demint.c (cplus_demangle_fill_component): Handle
DEMANGLE_COMPONENT_CONVERSION.
* testsuite/demangle-expected: Add tests.
From-SVN: r231020
2015-11-27 14:48:21 +00:00
|
|
|
#
|
|
|
|
# These two are from gcc PR61321, and gcc PR61233 / gdb PR16957
|
|
|
|
#
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z13function_tempIiEv1AIXszcvT_Li999EEE
|
|
|
|
void function_temp<int>(A<sizeof ((int)(999))>)
|
|
|
|
#
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z7ZipWithI7QStringS0_5QListZN4oral6detail16AdaptCreateTableI7AccountEES0_RKNS3_16CachedFieldsDataEEUlRKS0_SA_E_ET1_IDTclfp1_cvT__EcvT0__EEEERKT1_ISC_ERKT1_ISD_ET2_
|
2020-07-10 09:34:28 -07:00
|
|
|
QList<decltype ({parm#3}((QString)(), (QString)()))> ZipWith<QString, QString, QList, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList<QList> const&, QList<QString> const&, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1})
|
PR other/61321 - demangler crash on casts in template parameters
The fix for bug 59195:
[C++ demangler handles conversion operator incorrectly]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59195
unfortunately makes the demangler crash due to infinite recursion, in
case of casts in template parameters.
For example, with:
template<int> struct A {};
template <typename Y> void function_temp(A<sizeof ((Y)(999))>) {}
template void function_temp<int>(A<sizeof (int)>);
The 'function_temp<int>' instantiation above mangles to:
_Z13function_tempIiEv1AIXszcvT_Li999EEE
The demangler parses this as:
typed name
template
name 'function_temp'
template argument list
builtin type int
function type
builtin type void
argument list
template (*)
name 'A'
template argument list
unary operator
operator sizeof
unary operator
cast
template parameter 0 (**)
literal
builtin type int
name '999'
And after the fix for 59195, due to:
static void
d_print_cast (struct d_print_info *dpi, int options,
const struct demangle_component *dc)
{
...
/* For a cast operator, we need the template parameters from
the enclosing template in scope for processing the type. */
if (dpi->current_template != NULL)
{
dpt.next = dpi->templates;
dpi->templates = &dpt;
dpt.template_decl = dpi->current_template;
}
when printing the template argument list of A (what should be "<sizeof
(int)>"), the template parameter 0 (that is, "T_", the '**' above) now
refers to the first parameter of the the template argument list of the
'A' template (the '*' above), exactly what we were already trying to
print. This leads to infinite recursion, and stack exaustion. The
template parameter 0 should actually refer to the first parameter of
the 'function_temp' template.
Where it reads "for the cast operator" in the comment in d_print_cast
(above), it's really talking about a conversion operator, like:
struct A { template <typename U> explicit operator U(); };
We don't want to inject the template parameters from the enclosing
template in scope when processing a cast _expression_, only when
handling a conversion operator.
The problem is that DEMANGLE_COMPONENT_CAST is currently ambiguous,
and means _both_ 'conversion operator' and 'cast expression'.
Fix this by adding a new DEMANGLE_COMPONENT_CONVERSION component type,
which does what DEMANGLE_COMPONENT_CAST does today, and making
DEMANGLE_COMPONENT_CAST just simply print its component subtree.
I think we could instead reuse DEMANGLE_COMPONENT_CAST and in
d_print_comp_inner still do:
@@ -5001,9 +5013,9 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
d_print_comp (dpi, options, dc->u.s_extended_operator.name);
return;
case DEMANGLE_COMPONENT_CAST:
d_append_string (dpi, "operator ");
- d_print_cast (dpi, options, dc);
+ d_print_conversion (dpi, options, dc);
return;
leaving the unary cast case below calling d_print_cast, but seems to
me that spliting the component types makes it easier to reason about
the code.
g++'s testsuite actually generates three symbols that crash the
demangler in the same way. I've added those as tests in the demangler
testsuite as well.
And then this fixes PR other/61233 too, which happens to be a
demangler crash originally reported to GDB, at:
https://sourceware.org/bugzilla/show_bug.cgi?id=16957
Bootstrapped and regtested on x86_64 Fedora 20.
Also ran this through GDB's testsuite. GDB will require a small
update to use DEMANGLE_COMPONENT_CONVERSION in one place it's using
DEMANGLE_COMPONENT_CAST in its sources.
libiberty/
2015-11-27 Pedro Alves <palves@redhat.com>
PR other/61321
PR other/61233
* demangle.h (enum demangle_component_type)
<DEMANGLE_COMPONENT_CONVERSION>: New value.
* cp-demangle.c (d_demangle_callback, d_make_comp): Handle
DEMANGLE_COMPONENT_CONVERSION.
(is_ctor_dtor_or_conversion): Handle DEMANGLE_COMPONENT_CONVERSION
instead of DEMANGLE_COMPONENT_CAST.
(d_operator_name): Return a DEMANGLE_COMPONENT_CONVERSION
component if handling a conversion.
(d_count_templates_scopes, d_print_comp_inner): Handle
DEMANGLE_COMPONENT_CONVERSION.
(d_print_comp_inner): Handle DEMANGLE_COMPONENT_CONVERSION instead
of DEMANGLE_COMPONENT_CAST.
(d_print_cast): Rename as ...
(d_print_conversion): ... this. Adjust comments.
(d_print_cast): Rewrite - simply print the left subcomponent.
* cp-demint.c (cplus_demangle_fill_component): Handle
DEMANGLE_COMPONENT_CONVERSION.
* testsuite/demangle-expected: Add tests.
From-SVN: r231020
2015-11-27 14:48:21 +00:00
|
|
|
#
|
|
|
|
# These three are symbols generated by g++'s testsuite, which triggered the same bug as above.
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z14int_if_addableI1YERiP1AIXszpldecvPT_Li0EdecvS4_Li0EEE
|
|
|
|
int& int_if_addable<Y>(A<sizeof ((*((Y*)(0)))+(*((Y*)(0))))>*)
|
|
|
|
#
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE
|
2019-11-16 14:45:30 +00:00
|
|
|
void baz<int>(A<sizeof (foo((int)(), (float _Complex)00000000_00000000))>*)
|
PR other/61321 - demangler crash on casts in template parameters
The fix for bug 59195:
[C++ demangler handles conversion operator incorrectly]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59195
unfortunately makes the demangler crash due to infinite recursion, in
case of casts in template parameters.
For example, with:
template<int> struct A {};
template <typename Y> void function_temp(A<sizeof ((Y)(999))>) {}
template void function_temp<int>(A<sizeof (int)>);
The 'function_temp<int>' instantiation above mangles to:
_Z13function_tempIiEv1AIXszcvT_Li999EEE
The demangler parses this as:
typed name
template
name 'function_temp'
template argument list
builtin type int
function type
builtin type void
argument list
template (*)
name 'A'
template argument list
unary operator
operator sizeof
unary operator
cast
template parameter 0 (**)
literal
builtin type int
name '999'
And after the fix for 59195, due to:
static void
d_print_cast (struct d_print_info *dpi, int options,
const struct demangle_component *dc)
{
...
/* For a cast operator, we need the template parameters from
the enclosing template in scope for processing the type. */
if (dpi->current_template != NULL)
{
dpt.next = dpi->templates;
dpi->templates = &dpt;
dpt.template_decl = dpi->current_template;
}
when printing the template argument list of A (what should be "<sizeof
(int)>"), the template parameter 0 (that is, "T_", the '**' above) now
refers to the first parameter of the the template argument list of the
'A' template (the '*' above), exactly what we were already trying to
print. This leads to infinite recursion, and stack exaustion. The
template parameter 0 should actually refer to the first parameter of
the 'function_temp' template.
Where it reads "for the cast operator" in the comment in d_print_cast
(above), it's really talking about a conversion operator, like:
struct A { template <typename U> explicit operator U(); };
We don't want to inject the template parameters from the enclosing
template in scope when processing a cast _expression_, only when
handling a conversion operator.
The problem is that DEMANGLE_COMPONENT_CAST is currently ambiguous,
and means _both_ 'conversion operator' and 'cast expression'.
Fix this by adding a new DEMANGLE_COMPONENT_CONVERSION component type,
which does what DEMANGLE_COMPONENT_CAST does today, and making
DEMANGLE_COMPONENT_CAST just simply print its component subtree.
I think we could instead reuse DEMANGLE_COMPONENT_CAST and in
d_print_comp_inner still do:
@@ -5001,9 +5013,9 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
d_print_comp (dpi, options, dc->u.s_extended_operator.name);
return;
case DEMANGLE_COMPONENT_CAST:
d_append_string (dpi, "operator ");
- d_print_cast (dpi, options, dc);
+ d_print_conversion (dpi, options, dc);
return;
leaving the unary cast case below calling d_print_cast, but seems to
me that spliting the component types makes it easier to reason about
the code.
g++'s testsuite actually generates three symbols that crash the
demangler in the same way. I've added those as tests in the demangler
testsuite as well.
And then this fixes PR other/61233 too, which happens to be a
demangler crash originally reported to GDB, at:
https://sourceware.org/bugzilla/show_bug.cgi?id=16957
Bootstrapped and regtested on x86_64 Fedora 20.
Also ran this through GDB's testsuite. GDB will require a small
update to use DEMANGLE_COMPONENT_CONVERSION in one place it's using
DEMANGLE_COMPONENT_CAST in its sources.
libiberty/
2015-11-27 Pedro Alves <palves@redhat.com>
PR other/61321
PR other/61233
* demangle.h (enum demangle_component_type)
<DEMANGLE_COMPONENT_CONVERSION>: New value.
* cp-demangle.c (d_demangle_callback, d_make_comp): Handle
DEMANGLE_COMPONENT_CONVERSION.
(is_ctor_dtor_or_conversion): Handle DEMANGLE_COMPONENT_CONVERSION
instead of DEMANGLE_COMPONENT_CAST.
(d_operator_name): Return a DEMANGLE_COMPONENT_CONVERSION
component if handling a conversion.
(d_count_templates_scopes, d_print_comp_inner): Handle
DEMANGLE_COMPONENT_CONVERSION.
(d_print_comp_inner): Handle DEMANGLE_COMPONENT_CONVERSION instead
of DEMANGLE_COMPONENT_CAST.
(d_print_cast): Rename as ...
(d_print_conversion): ... this. Adjust comments.
(d_print_cast): Rewrite - simply print the left subcomponent.
* cp-demint.c (cplus_demangle_fill_component): Handle
DEMANGLE_COMPONENT_CONVERSION.
* testsuite/demangle-expected: Add tests.
From-SVN: r231020
2015-11-27 14:48:21 +00:00
|
|
|
#
|
|
|
|
--format=gnu-v3
|
|
|
|
_Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv
|
|
|
|
X<sizeof ((P(((F)())())).array)>::Type foo<F>()
|
2016-07-15 14:38:15 -04:00
|
|
|
|
|
|
|
_Z1fIJidEEv1AIXsZT_EE
|
|
|
|
void f<int, double>(A<2>)
|
|
|
|
|
|
|
|
_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_
|
|
|
|
void A::f<int, int, int, int, int, int>(int (&) [6], int, int, int, int)
|
2016-07-18 11:28:51 -04:00
|
|
|
|
|
|
|
_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE
|
|
|
|
void unary_left<1, 2, 3>(A<(...+(1, 2, 3))>)
|
|
|
|
|
|
|
|
_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE
|
|
|
|
void unary_right<1, 2, 3>(A<((1, 2, 3)+...)>)
|
|
|
|
|
|
|
|
_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE
|
|
|
|
void binary_left<1, 2, 3>(A<((42)+...+(1, 2, 3))>)
|
|
|
|
|
|
|
|
_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE
|
|
|
|
void binary_right<1, 2, 3>(A<((1, 2, 3)+...+(42))>)
|
2016-11-01 21:50:29 -04:00
|
|
|
# Inheriting constructor
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
|
2016-11-01 21:50:29 -04:00
|
|
|
_ZN1DCI11BEi
|
|
|
|
D::B(int)
|
Implement P0012R1, Make exception specifications part of the type system.
gcc/cp/
* cp-tree.h (enum tsubst_flags): Add tf_fndecl_type.
(flag_noexcept_type, ce_type): New.
* call.c (build_conv): Add ck_fnptr.
(enum conversion_kind): Change ck_tsafe to ck_fnptr.
(convert_like_real): Likewise.
(standard_conversion): Likewise. Allow function pointer
conversions for pointers to member functions.
(reference_compatible_p): Allow function pointer conversions.
(direct_reference_binding): Likewise.
(reference_binding): Reference-compatible is no longer a subset of
reference-related.
(is_subseq): Also strip ck_lvalue after next_conversion.
* class.c (instantiate_type): Check fnptr_conv_p.
(resolve_address_of_overloaded_function): Likewise.
* cvt.c (can_convert_tx_safety): Now static.
(noexcept_conv_p, fnptr_conv_p, strip_fnptr_conv): New.
* decl.c (flag_noexcept_type): Define.
(cxx_init_decl_processing): Set it.
(bad_specifiers): Check it.
(grokdeclarator) [cdk_function]: Add exception-spec to type here.
* lambda.c (maybe_add_lambda_conv_op): Add exception-spec to
returned pointer.
* mangle.c (struct globals): Add need_cxx1z_warning.
(mangle_decl): Check it.
(write_exception_spec): New.
(write_function_type): Call it.
(canonicalize_for_substitution): Handle exception spec.
(write_type): Likewise.
(write_encoding): Set processing_template_decl across mangling of
partially-instantiated type.
* pt.c (determine_specialization): Pass tf_fndecl_type.
(tsubst_decl, fn_type_unification): Likewise.
(tsubst): Strip tf_fndecl_type, pass it to
tsubst_exception_specification.
(convert_nontype_argument_function): Handle function pointer
conversion.
(convert_nontype_argument): Likewise.
(unify, for_each_template_parm_r): Walk into noexcept-specifier.
* rtti.c (ptr_initializer): Encode noexcept.
* tree.c (canonical_eh_spec): New.
(build_exception_variant): Use it.
* typeck.c (composite_pointer_type): Handle fnptr conversion.
(comp_except_specs): Compare canonical EH specs.
(structural_comptypes): Call it.
gcc/c-family/
* c.opt (Wc++1z-compat): New.
* c-cppbuiltin.c (c_cpp_builtins): Add __cpp_noexcept_function_type.
libstdc++-v3/
* include/bits/c++config (_GLIBCXX_NOEXCEPT_PARM)
(_GLIBCXX_NOEXCEPT_QUAL): New.
* include/std/type_traits (is_function): Use them.
* libsubc++/new (launder): Likewise.
* libsupc++/cxxabi.h (__pbase_type_info::__masks): Add
__noexcept_mask.
* libsupc++/pbase_type_info.cc (__do_catch): Handle function
pointer conversion.
libiberty/
* cp-demangle.c (is_fnqual_component_type): New.
(d_encoding, d_print_comp_inner, d_print_mod_list): Use it.
(FNQUAL_COMPONENT_CASE): New.
(d_make_comp, has_return_type, d_print_comp_inner)
(d_print_function_type): Use it.
(next_is_type_qual): New.
(d_cv_qualifiers, d_print_mod): Handle noexcept and throw-spec.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_NOEXCEPT, DEMANGLE_COMPONENT_THROW_SPEC.
From-SVN: r241944
2016-11-07 18:09:29 -05:00
|
|
|
# exception-specification (C++17)
|
Remove support for demangling GCC 2.x era mangling schemes.
libiberty/
* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
internal_cplus_demangle, and all subroutines.
(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
Lucid, ARM, HP, and EDG demangling styles.
(cplus_demangle): Remove 'work' variable. Don't call
internal_cplus_demangle.
include/
* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
ARM, HP, and EDG demangling styles.
From-SVN: r267363
2018-12-22 19:06:34 -05:00
|
|
|
|
Implement P0012R1, Make exception specifications part of the type system.
gcc/cp/
* cp-tree.h (enum tsubst_flags): Add tf_fndecl_type.
(flag_noexcept_type, ce_type): New.
* call.c (build_conv): Add ck_fnptr.
(enum conversion_kind): Change ck_tsafe to ck_fnptr.
(convert_like_real): Likewise.
(standard_conversion): Likewise. Allow function pointer
conversions for pointers to member functions.
(reference_compatible_p): Allow function pointer conversions.
(direct_reference_binding): Likewise.
(reference_binding): Reference-compatible is no longer a subset of
reference-related.
(is_subseq): Also strip ck_lvalue after next_conversion.
* class.c (instantiate_type): Check fnptr_conv_p.
(resolve_address_of_overloaded_function): Likewise.
* cvt.c (can_convert_tx_safety): Now static.
(noexcept_conv_p, fnptr_conv_p, strip_fnptr_conv): New.
* decl.c (flag_noexcept_type): Define.
(cxx_init_decl_processing): Set it.
(bad_specifiers): Check it.
(grokdeclarator) [cdk_function]: Add exception-spec to type here.
* lambda.c (maybe_add_lambda_conv_op): Add exception-spec to
returned pointer.
* mangle.c (struct globals): Add need_cxx1z_warning.
(mangle_decl): Check it.
(write_exception_spec): New.
(write_function_type): Call it.
(canonicalize_for_substitution): Handle exception spec.
(write_type): Likewise.
(write_encoding): Set processing_template_decl across mangling of
partially-instantiated type.
* pt.c (determine_specialization): Pass tf_fndecl_type.
(tsubst_decl, fn_type_unification): Likewise.
(tsubst): Strip tf_fndecl_type, pass it to
tsubst_exception_specification.
(convert_nontype_argument_function): Handle function pointer
conversion.
(convert_nontype_argument): Likewise.
(unify, for_each_template_parm_r): Walk into noexcept-specifier.
* rtti.c (ptr_initializer): Encode noexcept.
* tree.c (canonical_eh_spec): New.
(build_exception_variant): Use it.
* typeck.c (composite_pointer_type): Handle fnptr conversion.
(comp_except_specs): Compare canonical EH specs.
(structural_comptypes): Call it.
gcc/c-family/
* c.opt (Wc++1z-compat): New.
* c-cppbuiltin.c (c_cpp_builtins): Add __cpp_noexcept_function_type.
libstdc++-v3/
* include/bits/c++config (_GLIBCXX_NOEXCEPT_PARM)
(_GLIBCXX_NOEXCEPT_QUAL): New.
* include/std/type_traits (is_function): Use them.
* libsubc++/new (launder): Likewise.
* libsupc++/cxxabi.h (__pbase_type_info::__masks): Add
__noexcept_mask.
* libsupc++/pbase_type_info.cc (__do_catch): Handle function
pointer conversion.
libiberty/
* cp-demangle.c (is_fnqual_component_type): New.
(d_encoding, d_print_comp_inner, d_print_mod_list): Use it.
(FNQUAL_COMPONENT_CASE): New.
(d_make_comp, has_return_type, d_print_comp_inner)
(d_print_function_type): Use it.
(next_is_type_qual): New.
(d_cv_qualifiers, d_print_mod): Handle noexcept and throw-spec.
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_NOEXCEPT, DEMANGLE_COMPONENT_THROW_SPEC.
From-SVN: r241944
2016-11-07 18:09:29 -05:00
|
|
|
_Z1fIvJiELb0EEvPDOT1_EFT_DpT0_E
|
|
|
|
void f<void, int, false>(void (*)(int) noexcept(false))
|
|
|
|
|
|
|
|
_Z1fIvJiELb0EEvPDoFT_DpT0_E
|
|
|
|
void f<void, int, false>(void (*)(int) noexcept)
|
|
|
|
|
|
|
|
_Z1fIvJiELb0EEvPDwiEFT_DpT0_E
|
|
|
|
void f<void, int, false>(void (*)(int) throw(int))
|
2016-11-15 19:31:50 +00:00
|
|
|
|
2016-11-15 19:31:59 +00:00
|
|
|
# fold-expression with missing third component could crash.
|
|
|
|
_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_LiEEE
|
|
|
|
_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_LiEEE
|
|
|
|
|
|
|
|
# ?: expression with missing third component could crash.
|
|
|
|
AquT_quT_4mxautouT_4mxxx
|
|
|
|
AquT_quT_4mxautouT_4mxxx
|
2016-12-12 17:00:37 +00:00
|
|
|
|
|
|
|
# pr c++/78252 generic lambda mangling uses template parms, and leads
|
|
|
|
# to unbounded recursion if not dealt with properly
|
|
|
|
_Z7forwardIRZ3FoovEUlRT_E_EOS0_S1_
|
|
|
|
Foo()::{lambda(auto:1&)#1}& forward<Foo()::{lambda(auto:1&)#1}&>(Foo()::{lambda(auto:1&)#1}&)
|
|
|
|
|
|
|
|
_Z7forwardIZ3FoovEUlRiRT_E_EOS1_S2_
|
|
|
|
Foo()::{lambda(int&, auto:1&)#1}&& forward<Foo()::{lambda(int&, auto:1&)#1}>(Foo()::{lambda(int&, auto:1&)#1}&)
|
|
|
|
|
|
|
|
_Z7forwardIZ3FoovEUlRT_R1XIiEE0_EOS0_S1_
|
|
|
|
Foo()::{lambda(auto:1&, X<int>&)#2}&& forward<Foo()::{lambda(auto:1&, X<int>&)#2}>(Foo()::{lambda(auto:1&, X<int>&)#2}&)
|
|
|
|
|
|
|
|
_Z7forwardIZ3FoovEUlPA5_T_E1_EOS0_RS0_
|
|
|
|
Foo()::{lambda(auto:1 (*&&forward<Foo()::{lambda(auto:1 (*) [5])#3}>(auto:1&)) [5])#3}
|
|
|
|
|
|
|
|
_Z3eatIZ3FoovEUlRiRT_E_EvS2_
|
|
|
|
void eat<Foo()::{lambda(int&, auto:1&)#1}>(Foo()::{lambda(int&, auto:1&)#1}&)
|
|
|
|
|
|
|
|
_Z3eatIZ3FoovEUlRT_R1XIiEE0_EvS1_
|
|
|
|
void eat<Foo()::{lambda(auto:1&, X<int>&)#2}>(Foo()::{lambda(auto:1&, X<int>&)#2}&)
|
|
|
|
|
|
|
|
_Z3eatIZ3FoovEUlPA5_T_E1_EvRS0_
|
|
|
|
void eat<Foo()::{lambda(auto:1 (*) [5])#3}>(Foo()::{lambda(auto:1 (*&) [5])#3})
|
|
|
|
|
|
|
|
_Z3eatIPiZ3FoovEUlPT_PT0_E4_EvRS1_RS3_
|
|
|
|
void eat<int*, Foo()::{lambda(auto:1*, auto:2*)#6}>(int*&, Foo()::{lambda(auto:1*, auto:2*)#6}&)
|
|
|
|
|
|
|
|
_Z3eatIPiZ3BarIsEvvEUlPsPT_PT0_E0_EvRS3_RS5_
|
2017-09-26 02:38:12 +00:00
|
|
|
void eat<int*, Bar<short>()::{lambda(short*, auto:1*, auto:2*)#2}>(int*&, Bar<short>()::{lambda(short*, auto:1*, auto:2*)#2}&)
|
2017-01-18 08:40:05 +00:00
|
|
|
|
2018-11-05 02:47:02 -05:00
|
|
|
_Z1fP1BIXtl1ALi1EEEE
|
|
|
|
f(B<A{1}>*)
|
|
|
|
|
|
|
|
_ZTAXtl1ALi1EEE
|
|
|
|
template parameter object for A{1}
|
|
|
|
|
2017-01-18 08:40:05 +00:00
|
|
|
# PR 77489
|
|
|
|
_ZZ3foovE8localVar_9
|
|
|
|
foo()::localVar
|
|
|
|
|
|
|
|
_ZZ3foovE8localVar_10
|
|
|
|
foo()::localVar
|
|
|
|
|
|
|
|
_ZZ3foovE8localVar__10_
|
|
|
|
foo()::localVar
|
|
|
|
|
|
|
|
_ZZ3foovE8localVar__9_
|
|
|
|
_ZZ3foovE8localVar__9_
|
|
|
|
|
|
|
|
_ZZ3foovE8localVar__12
|
|
|
|
_ZZ3foovE8localVar__12
|
2017-01-18 08:49:11 +00:00
|
|
|
|
|
|
|
# PR 70182
|
|
|
|
_Z1gI1AEv1SIXadsrT_onplEE
|
|
|
|
void g<A>(S<&A::operator+>)
|
|
|
|
|
|
|
|
_Z1gI1AEv1SIXadsrT_plEE
|
|
|
|
void g<A>(S<&A::operator+>)
|
2017-03-08 14:28:38 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Test recursion PR67264
|
|
|
|
_Z1KIStcvT_E
|
|
|
|
_Z1KIStcvT_E
|
|
|
|
|
|
|
|
_ZcvT_IIS0_EE
|
|
|
|
_ZcvT_IIS0_EE
|
|
|
|
|
|
|
|
_ZcvT_IZcvT_E1fE
|
|
|
|
_ZcvT_IZcvT_E1fE
|
|
|
|
|
|
|
|
_Z1gINcvT_EE
|
|
|
|
_Z1gINcvT_EE
|
|
|
|
|
|
|
|
_ZcvT_ILZcvDTT_EEE
|
|
|
|
_ZcvT_ILZcvDTT_EEE
|
|
|
|
|
|
|
|
_Z1gIJOOT_EEOT_c
|
|
|
|
_Z1gIJOOT_EEOT_c
|
|
|
|
|
|
|
|
_Z1KMMMMMMMMMMMMMMMA_xooooooooooooooo
|
|
|
|
_Z1KMMMMMMMMMMMMMMMA_xooooooooooooooo
|
|
|
|
|
|
|
|
_ZdvMMMMMMMMMMMMMrrrrA_DTdvfp_fp_Eededilfdfdfdfd
|
|
|
|
_ZdvMMMMMMMMMMMMMrrrrA_DTdvfp_fp_Eededilfdfdfdfd
|
|
|
|
#
|
|
|
|
# Test for Infinite Recursion PR70909
|
|
|
|
|
|
|
|
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
|
|
|
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
2017-04-27 10:44:28 +01:00
|
|
|
#
|
|
|
|
# demangler/80513 Test for overflow in d_number
|
2017-09-15 10:50:05 +00:00
|
|
|
|
2017-04-27 10:44:28 +01:00
|
|
|
_Z4294967297x
|
|
|
|
_Z4294967297x
|
|
|
|
#
|
2017-09-15 12:23:57 +00:00
|
|
|
# demangler/82195 members of lambdas
|
|
|
|
--no-params
|
|
|
|
_ZZZ3FoovENKUlT_E_clIiEEfS_EN5Local2fnEv
|
2017-09-26 02:38:12 +00:00
|
|
|
Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::Local::fn()
|
|
|
|
Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::Local::fn
|
2017-09-15 12:23:57 +00:00
|
|
|
--no-params
|
|
|
|
_Z7CaptureIZZ3FoovENKUlT_E_clIiEEvS0_EUlvE_EvOS0_
|
2017-09-26 02:38:12 +00:00
|
|
|
void Capture<Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::{lambda()#1}>(Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::{lambda()#1}&&)
|
|
|
|
Capture<Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::{lambda()#1}>
|
2017-09-15 12:23:57 +00:00
|
|
|
--no-params
|
|
|
|
_Z4FrobIZZ3FoovENKUlT_E_clIiEEvS0_EUlvE_Evv
|
2017-09-26 02:38:12 +00:00
|
|
|
void Frob<Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::{lambda()#1}>()
|
|
|
|
Frob<Foo()::{lambda(auto:1)#1}::operator()<int>(int) const::{lambda()#1}>
|
2017-09-21 15:52:31 +00:00
|
|
|
# A lambda {local-class::member-fn}
|
|
|
|
--no-params
|
|
|
|
_ZZ3FoovENKUlT_E_clIiEEfS_
|
|
|
|
float Foo()::{lambda(auto:1)#1}::operator()<int>(int) const
|
|
|
|
Foo()::{lambda(auto:1)#1}::operator()<int>
|
2017-09-26 02:38:12 +00:00
|
|
|
# template-fn {local-class::member-fn}
|
|
|
|
--no-params
|
|
|
|
_ZZ3FooIiEfvEN1X2fnEv
|
|
|
|
Foo<int>()::X::fn()
|
|
|
|
Foo<int>()::X::fn
|
|
|
|
# template-fn generic-lambda local-class::member-fn
|
|
|
|
--no-params
|
|
|
|
_ZZZ3FooIiEfvENKUlT_E_clIcEEDaS0_EN1X2fnEv
|
|
|
|
Foo<int>()::{lambda(auto:1)#1}::operator()<char>(char) const::X::fn()
|
|
|
|
Foo<int>()::{lambda(auto:1)#1}::operator()<char>(char) const::X::fn
|
2019-11-04 23:24:25 +00:00
|
|
|
#PR91979 demangling nullptr expression
|
|
|
|
|
|
|
|
_Z3fooILPv0EEvPN9enable_ifIXeqT_LDnEEvE4typeE
|
2020-03-02 03:50:34 -08:00
|
|
|
void foo<(void*)0>(enable_if<((void*)0)==(decltype(nullptr)), void>::type*)
|
2019-12-04 11:39:38 +00:00
|
|
|
|
|
|
|
_ZNK5coro15emptyawEv
|
|
|
|
coro1::empty::operator co_await() const
|
2020-04-27 20:59:25 +02:00
|
|
|
|
|
|
|
_ZNK3FoossERKS_
|
|
|
|
Foo::operator<=>(Foo const&) const
|
2020-07-04 05:45:01 -04:00
|
|
|
|
|
|
|
_Z1f1AIXtl1Udi1iLi0EEEE
|
|
|
|
f(A<U{.i=(0)}>)
|
|
|
|
|
|
|
|
_Z1f1AIXtl1Xdi1adi1bdxLi3ELi1EEEE
|
|
|
|
f(A<X{.a.b[3]=(1)}>)
|
|
|
|
|
|
|
|
_Z1f1AIXtl1Xdi1adi1bdXLi3ELi4ELi1EEEE
|
|
|
|
f(A<X{.a.b[3 ... 4]=(1)}>)
|
2020-07-10 09:34:28 -07:00
|
|
|
|
|
|
|
# PR 96143
|
|
|
|
_Z2F2IZ1FvEUlvE_EN1AIT_E1XES2_
|
|
|
|
A<F()::{lambda()#1}>::X F2<F()::{lambda()#1}>(F()::{lambda()#1})
|
2020-11-11 15:11:23 -05:00
|
|
|
|
|
|
|
# PR 88115
|
2021-03-30 22:57:11 -04:00
|
|
|
_Z1fIiEvDTu11__alignof__T_EE
|
2020-11-11 15:11:23 -05:00
|
|
|
void f<int>(decltype (__alignof__(int)))
|
|
|
|
|
2021-03-30 22:57:11 -04:00
|
|
|
_Z1fIiEvDTu11__alignof__XtlT_EEEE
|
2020-11-11 15:11:23 -05:00
|
|
|
void f<int>(decltype (__alignof__(int{})))
|
2020-12-19 13:10:01 -05:00
|
|
|
|
|
|
|
_Z1gI1AEv1SIXadsrT_oncviEE
|
|
|
|
void g<A>(S<&A::operator int>)
|
|
|
|
|
|
|
|
_Z1jI1AEDTcldtfp_oncvPT_EES1_
|
|
|
|
decltype (({parm#1}.(operator A*))()) j<A>(A)
|
2020-12-21 15:50:02 -05:00
|
|
|
|
|
|
|
_Z1fI1AEDtdtfp_srT_1xES1_
|
|
|
|
decltype ({parm#1}.A::x) f<A>(A)
|
2020-12-21 17:36:25 -05:00
|
|
|
|
|
|
|
_Z2f6IP1AEDtptfp_gssr1A1BE1xET_
|
|
|
|
decltype ({parm#1}->(::A::B::x)) f6<A*>(A*)
|
2022-03-08 13:00:35 -08:00
|
|
|
|
|
|
|
# Structured Bindings
|
|
|
|
_ZDC1a1bE
|
|
|
|
[a, b]
|
|
|
|
|
|
|
|
_ZNStDC1aEE
|
|
|
|
std::[a]
|
|
|
|
|
|
|
|
_ZN3NMSDC1aEE
|
|
|
|
NMS::[a]
|
2022-03-08 12:54:03 -08:00
|
|
|
|
|
|
|
# Modules
|
|
|
|
_ZN5Outer5InnerW3FOO2FnERNS0_1XE
|
|
|
|
Outer::Inner::Fn@FOO(Outer::Inner::X&)
|
|
|
|
|
|
|
|
_ZN5OuterW3FOO5Inner2FnERNS1_1XE
|
|
|
|
Outer::Inner@FOO::Fn(Outer::Inner@FOO::X&)
|
|
|
|
|
|
|
|
_ZN4Quux4TotoW3FooW3Bar3BazEPNS0_S2_5PlughE
|
|
|
|
Quux::Toto::Baz@Foo.Bar(Quux::Toto::Plugh@Foo.Bar*)
|
|
|
|
|
|
|
|
_ZW6Module1fNS_1a1bENS0_1cE
|
|
|
|
f@Module(a@Module::b, a@Module::c)
|
|
|
|
|
|
|
|
_ZN3BobW3FOOW3BAR3BarEPS1_1APNS_S1_1BE
|
|
|
|
Bob::Bar@FOO.BAR(A@FOO.BAR*, Bob::B@FOO.BAR*)
|
|
|
|
|
|
|
|
_ZW3FOOW3BAR3FooPS0_1APN3BobS0_1BE
|
|
|
|
Foo@FOO.BAR(A@FOO.BAR*, Bob::B@FOO.BAR*)
|
|
|
|
|
|
|
|
_ZN3BobW3FOOW3BAZ3FooEPS0_W3BAR1APNS_S2_1BE
|
|
|
|
Bob::Foo@FOO.BAZ(A@FOO.BAR*, Bob::B@FOO.BAR*)
|
|
|
|
|
|
|
|
_ZW3FOOW3BAZ3BarPS_W3BAR1APN3BobS1_1BE
|
|
|
|
Bar@FOO.BAZ(A@FOO.BAR*, Bob::B@FOO.BAR*)
|
|
|
|
|
|
|
|
_ZNW3FOO3TPLIS_3OneE1MEPS1_
|
|
|
|
TPL@FOO<One@FOO>::M(One@FOO*)
|
|
|
|
|
|
|
|
_ZNW3FOO3TPLIS_3OneE1NIS_3TwoEEvPS1_PT_
|
|
|
|
void TPL@FOO<One@FOO>::N<Two@FOO>(One@FOO*, Two@FOO*)
|
|
|
|
|
|
|
|
_ZN3NMSW3FOO3TPLINS_S0_3OneEE1MEPS2_
|
|
|
|
NMS::TPL@FOO<NMS::One@FOO>::M(NMS::One@FOO*)
|
|
|
|
|
|
|
|
_ZN3NMSW3FOO3TPLINS_S0_3OneEE1NINS_S0_3TwoEEEvPS2_PT_
|
|
|
|
void NMS::TPL@FOO<NMS::One@FOO>::N<NMS::Two@FOO>(NMS::One@FOO*, NMS::Two@FOO*)
|
|
|
|
|
|
|
|
_ZNStW3STD9allocatorIiE1MEPi
|
|
|
|
std::allocator@STD<int>::M(int*)
|
|
|
|
|
|
|
|
_ZNStW3STD9allocatorIiE1NIfEEPT_Pi
|
|
|
|
float* std::allocator@STD<int>::N<float>(int*)
|
|
|
|
|
|
|
|
_ZNStW3STD9allocatorI4PoohE1MEPS1_
|
|
|
|
std::allocator@STD<Pooh>::M(Pooh*)
|
|
|
|
|
|
|
|
_ZNStW3STD9allocatorI4PoohE1NI6PigletEEPT_PS1_
|
|
|
|
Piglet* std::allocator@STD<Pooh>::N<Piglet>(Pooh*)
|
|
|
|
|
|
|
|
_ZW3FooDC1a1bE
|
|
|
|
[a, b]@Foo
|
|
|
|
|
|
|
|
_ZN1NW3FooDC1a1bEE
|
|
|
|
N::[a, b]@Foo
|
|
|
|
|
|
|
|
_ZN3NMSW3MOD3FooB3ABIEv
|
|
|
|
NMS::Foo@MOD[abi:ABI]()
|
|
|
|
|
|
|
|
_ZGIW3Foo
|
|
|
|
initializer for module Foo
|
|
|
|
|
|
|
|
_ZGIW3FooW3Bar
|
|
|
|
initializer for module Foo.Bar
|
|
|
|
|
|
|
|
_ZGIW3FooWP3BarW3Baz
|
|
|
|
initializer for module Foo:Bar.Baz
|
2022-09-30 12:11:42 -07:00
|
|
|
|
|
|
|
_ZZ2L1vENKUlDpT_E_clIJiPiEEEvS0_
|
|
|
|
void L1()::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
|
|
|
|
|
|
|
|
_ZZ2L1vENKUlDpT_E_clIJiPiEEEDaS0_
|
|
|
|
auto L1()::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
|
|
|
|
|
2022-09-30 09:43:30 -07:00
|
|
|
_Z7captureIN4gvarMUlvE_EE7WrapperIT_EOS3_
|
|
|
|
Wrapper<gvar::{lambda()#1}> capture<gvar::{lambda()#1}>(gvar::{lambda()#1}&&)
|
|
|
|
|
|
|
|
_ZNK2L2MUlT_T0_E_clIifEEvS_S0_
|
|
|
|
void L2::{lambda(auto:1, auto:2)#1}::operator()<int, float>(L2, int) const
|
|
|
|
|
|
|
|
_ZNK1C1fMUlT_E_clIMS_iEEDaS1_
|
|
|
|
auto C::f::{lambda(auto:1)#1}::operator()<int C::*>(int C::*) const
|
|
|
|
|
|
|
|
_ZNK2L2MUlT_T0_E_clIifEEvS0_S1_
|
|
|
|
void L2::{lambda(auto:1, auto:2)#1}::operator()<int, float>(int, float) const
|
|
|
|
|
|
|
|
_ZNK1B2L3MUlT_T0_E_clIjdEEvS1_S2_
|
|
|
|
void B::L3::{lambda(auto:1, auto:2)#1}::operator()<unsigned int, double>(unsigned int, double) const
|
|
|
|
|
|
|
|
_Z3fooIN1qMUlvE_ENS0_UlvE0_EEiOT_OT0_
|
|
|
|
int foo<q::{lambda()#1}, q::{lambda()#2}>(q::{lambda()#1}&&, q::{lambda()#2}&&)
|
|
|
|
|
|
|
|
_ZNK2L1MUlDpT_E_clIJiPiEEEvS1_
|
|
|
|
void L1::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
|
|
|
|
|
demangler: Templated lambda demangling
Templated lambdas have a template-head, which is part of their
signature. GCC ABI 18 mangles that into the lambda name. This adds
support to the demangler. We have to introduce artificial template
parameter names, as we need to refer to them from later components of
the lambda signature. We use $T:n, $N:n and $TT:n for type, non-type
and template parameters. Non-type parameter names are not shown in
the strictly correct location -- for instance 'int (&NT) ()' would be
shown as 'int (&) $N:n'. That's unfortunate, but an orthogonal issue.
The 'is_lambda_arg' field is now repurposed as indicating the number
of explicit template parameters (1-based).
include/
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_TEMPLATE_HEAD,
DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM.
libiberty/
* cp-demangle.c (struct d_print_info): Rename is_lambda_arg to
lambda_tpl_parms. Augment semantics.
(d_make_comp): Add checks for new components.
(d_template_parm, d_template_head): New.
(d_lambda): Add templated lambda support.
(d_print_init): Adjust.
(d_print_lambda_parm_name): New.
(d_print_comp_inner): Support templated lambdas,
* testsuite/demangle-expected: Add testcases.
2022-11-07 11:24:14 -05:00
|
|
|
_ZZN1XIfLj0EE2FnEvENKUlTyfT_E_clIiEEDafS1_
|
|
|
|
auto X<float, 0u>::Fn()::{lambda<typename $T0>(float, $T0)#1}::operator()<int>(float, int) const
|
|
|
|
|
|
|
|
_ZZN1XIfLj0EE2FnEvENKUlTyT_E_clIiEEDaS1_
|
|
|
|
auto X<float, 0u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
|
|
|
|
|
|
|
|
_ZZN1XIfLj1EE2FnEvENKUlTyfT_E_clIiEEDafS1_
|
|
|
|
auto X<float, 1u>::Fn()::{lambda<typename $T0>(float, $T0)#1}::operator()<int>(float, int) const
|
|
|
|
|
|
|
|
_ZZN1XIfLj1EE2FnEvENKUlTyT_E_clIiEEDaS1_
|
|
|
|
auto X<float, 1u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
|
|
|
|
|
|
|
|
_ZZN1XIiLj0EE2FnEvENKUlTyiT_E_clIiEEDaiS1_
|
|
|
|
auto X<int, 0u>::Fn()::{lambda<typename $T0>(int, $T0)#1}::operator()<int>(int, int) const
|
|
|
|
|
|
|
|
_ZZN1XIiLj0EE2FnEvENKUlTyT_E_clIiEEDaS1_
|
|
|
|
auto X<int, 0u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
|
|
|
|
|
|
|
|
_ZNK10l_tpl_autoMUlTyT_T0_E_clIiiEEDaS0_S1_
|
|
|
|
auto l_tpl_auto::{lambda<typename $T0>($T0, auto:2)#1}::operator()<int, int>(int, int) const
|
|
|
|
|
|
|
|
_ZNK12l_tpl_nt_aryMUlTniRAT__iE_clILi2EEEDaS1_
|
|
|
|
auto l_tpl_nt_ary::{lambda<int $N0>(int (&) [$N0])#1}::operator()<2>(int (&) [2]) const
|
|
|
|
|
|
|
|
_ZNK13l_tpl_nt_autoMUlTnDavE_clILi0EEEDav
|
|
|
|
auto l_tpl_nt_auto::{lambda<auto $N0>()#1}::operator()<0>() const
|
|
|
|
|
|
|
|
_ZNK9l_tpl_tplMUlTtTyTnjER3TPLIT_EE_clI1UEEDaS3_
|
|
|
|
auto l_tpl_tpl::{lambda<template<typename, unsigned int> class $TT0>(TPL<$TT0>&)#1}::operator()<U>(TPL<U>&) const
|
|
|
|
|
|
|
|
_ZNK13l_tpl_tpl_tplMUlTtTtTyTnjEER6TPLTPLIT_EE_clI3TPLEEDaS3_
|
|
|
|
auto l_tpl_tpl_tpl::{lambda<template<template<typename, unsigned int> class> class $TT0>(TPLTPL<$TT0>&)#1}::operator()<TPL>(TPLTPL<TPL>&) const
|
|
|
|
|
|
|
|
_ZNK5l_varMUlTpTyDpT_E_clIJiiiEEEDaS1_
|
|
|
|
auto l_var::{lambda<typename... $T0>(($T0)...)#1}::operator()<int, int, int>(int, int, int) const
|
|
|
|
|
|
|
|
_ZNK6l_var2MUlTpTniDpRAT__iE_clIJLi2ELi2EEEEDaS2_
|
|
|
|
auto l_var2::{lambda<int... $N0>((int (&) [$N0])...)#1}::operator()<2, 2>(int (&) [2], int (&) [2]) const
|
|
|
|
|
|
|
|
_ZNK6l_var3MUlTtTpTniETpTniRT_IJXspT0_EEEE_clI1XJLi1ELi2ELi3EEEEDaS2_
|
|
|
|
auto l_var3::{lambda<template<int...> class $TT0, int... $N1>($TT0<($N1)...>&)#1}::operator()<X, 1, 2, 3>(X<1, 2, 3>&) const
|
|
|
|
|
|
|
|
_ZNK6l_var4MUlTpTtTyTnjER1YIJDpT_EEE_clIJ1US7_EEEDaS4_
|
|
|
|
auto l_var4::{lambda<template<typename, unsigned int> class... $TT0>(Y<($TT0)...>&)#1}::operator()<U, U>(Y<U, U>&) const
|
|
|
|
|
|
|
|
_ZZ2FnILi1EEvvENKUlTyT_E_clIiEEDaS0_
|
|
|
|
auto Fn<1>()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
|
|
|
|
|
|
|
|
_ZZ1fvENKUlTyP1XIT_EPS_IiEE_clIcEEDaS2_S4_
|
|
|
|
auto f()::{lambda<typename $T0>(X<$T0>*, X<int>*)#1}::operator()<char>(X<char>*, X<int>*) const
|
|
|
|
|
|
|
|
_ZZN1XIiE1FEvENKUliE_clEi
|
|
|
|
X<int>::F()::{lambda(int)#1}::operator()(int) const
|
2023-06-03 09:03:27 -04:00
|
|
|
|
|
|
|
_Z1fIiEv1AIXnxtlT_EEE
|
|
|
|
void f<int>(A<noexcept(int{})>)
|
2023-06-12 19:37:04 -04:00
|
|
|
|
|
|
|
_ZNO1Ycv1XEv
|
|
|
|
Y::operator X() &&
|
|
|
|
|
|
|
|
_ZNO1Ycv1XIT_EIvEEv
|
|
|
|
Y::operator X<void><void>() &&
|
|
|
|
|
|
|
|
_ZNO1Y3bobEv
|
|
|
|
Y::bob() &&
|
|
|
|
|
|
|
|
_ZNR1Y3bobEv
|
|
|
|
Y::bob() &
|
|
|
|
|
|
|
|
_ZNKR1YcvRK1XIT_EIvEEv
|
|
|
|
Y::operator X<void> const&<void>() const &
|
|
|
|
|
|
|
|
_ZZN1XIiEcviEvE1y
|
|
|
|
X<int>::operator int()::y
|
|
|
|
|
|
|
|
_ZZN1XIiEcv1ZIiEEvE1y
|
|
|
|
X<int>::operator Z<int>()::y
|
|
|
|
|
|
|
|
_ZZN1Xcv1ZIT_EIiEEvE1y
|
|
|
|
X::operator Z<int><int>()::y
|
|
|
|
|
|
|
|
_ZZN1XIfEcv1ZIT_EIiEEvE1y
|
|
|
|
X<float>::operator Z<int><int>()::y
|
2023-08-17 11:36:23 -04:00
|
|
|
|
|
|
|
_ZN1SILi1EEF3barIiEEiR4Base
|
|
|
|
int S<1>::bar[friend]<int>(Base&)
|
c++: mangle function template constraints
Per https://github.com/itanium-cxx-abi/cxx-abi/issues/24 and
https://github.com/itanium-cxx-abi/cxx-abi/pull/166
We need to mangle constraints to be able to distinguish between function
templates that only differ in constraints. From the latter link, we want to
use the template parameter mangling previously specified for lambdas to also
make explicit the form of a template parameter where the argument is not a
"natural" fit for it, such as when the parameter is constrained or deduced.
I'm concerned about how the latter link changes the mangling for some C++98
and C++11 patterns, so I've limited template_parm_natural_p to avoid two
cases found by running the testsuite with -Wabi forced on:
template <class T, T V> T f() { return V; }
int main() { return f<int,42>(); }
template <int i> int max() { return i; }
template <int i, int j, int... rest> int max()
{
int sub = max<j, rest...>();
return i > sub ? i : sub;
}
int main() { return max<1,2,3>(); }
A third C++11 pattern is changed by this patch:
template <template <typename...> class TT, typename... Ts> TT<Ts...> f();
template <typename> struct A { };
int main() { f<A,int>(); }
I aim to resolve these with the ABI committee before GCC 14.1.
We also need to resolve https://github.com/itanium-cxx-abi/cxx-abi/issues/38
(mangling references to dependent template-ids where the name is fully
resolved) as references to concepts in std:: will consistently run into this
area. This is why mangle-concepts1.C only refers to concepts in the global
namespace so far.
The library changes are to avoid trying to mangle builtins, which fails.
Demangler support and test coverage is not complete yet.
gcc/cp/ChangeLog:
* cp-tree.h (TEMPLATE_ARGS_TYPE_CONSTRAINT_P): New.
(get_concept_check_template): Declare.
* constraint.cc (combine_constraint_expressions)
(finish_shorthand_constraint): Use UNKNOWN_LOCATION.
* pt.cc (convert_generic_types_to_packs): Likewise.
* mangle.cc (write_constraint_expression)
(write_tparms_constraints, write_type_constraint)
(template_parm_natural_p, write_requirement)
(write_requires_expr): New.
(write_encoding): Mangle trailing requires-clause.
(write_name): Pass parms to write_template_args.
(write_template_param_decl): Factor out from...
(write_closure_template_head): ...here.
(write_template_args): Mangle non-natural parms
and requires-clause.
(write_expression): Handle REQUIRES_EXPR.
include/ChangeLog:
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_CONSTRAINTS.
libiberty/ChangeLog:
* cp-demangle.c (d_make_comp): Handle
DEMANGLE_COMPONENT_CONSTRAINTS.
(d_count_templates_scopes): Likewise.
(d_print_comp_inner): Likewise.
(d_maybe_constraints): New.
(d_encoding, d_template_args_1): Call it.
(d_parmlist): Handle 'Q'.
* testsuite/demangle-expected: Add some constraint tests.
libstdc++-v3/ChangeLog:
* include/std/bit: Avoid builtins in requires-clauses.
* include/std/variant: Likewise.
gcc/testsuite/ChangeLog:
* g++.dg/abi/mangle10.C: Disable compat aliases.
* g++.dg/abi/mangle52.C: Specify ABI 18.
* g++.dg/cpp2a/class-deduction-alias3.C
* g++.dg/cpp2a/class-deduction-alias8.C:
Avoid builtins in requires-clauses.
* g++.dg/abi/mangle-concepts1.C: New test.
* g++.dg/abi/mangle-ttp1.C: New test.
2023-09-25 10:15:02 +01:00
|
|
|
|
|
|
|
# requires on template-head
|
|
|
|
_Z1fIiQ1CIT_EEvv
|
|
|
|
void f<int>() requires C<int>
|
|
|
|
|
|
|
|
# requires after ()
|
|
|
|
_Z1fIiEvvQ1CIT_E
|
|
|
|
void f<int>() requires C<int>
|
2024-01-13 10:23:53 +01:00
|
|
|
|
|
|
|
_ZNH1S3fooES_
|
|
|
|
S::foo(this S)
|
|
|
|
|
|
|
|
_ZNH1S3barILi5EiEEvS_T0_
|
|
|
|
void S::bar<5, int>(this S, int)
|
|
|
|
|
|
|
|
_ZNH1S3bazERKS_
|
|
|
|
S::baz(this S const&)
|