From 290031a32c94782a793778c5e628eaa8ae2cdf56 Mon Sep 17 00:00:00 2001 From: mmitchel Date: Tue, 13 Sep 2005 15:15:37 +0000 Subject: [PATCH] PR c++/16171 * mangle.c (find_substitution): Do not use special substitutions for identifiers not in std::. PR c++/16171 * g++.dg/abi/mangle26.C: New test. * g++.dg/abi/mangle27.C: New test. * g++.dg/abi/mangle28.C: New test. * g++.dg/abi/mangle29.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104228 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/mangle.c | 7 +++---- gcc/testsuite/ChangeLog | 8 +++++++- gcc/testsuite/g++.dg/abi/mangle26.C | 14 ++++++++++++++ gcc/testsuite/g++.dg/abi/mangle27.C | 14 ++++++++++++++ gcc/testsuite/g++.dg/abi/mangle28.C | 14 ++++++++++++++ gcc/testsuite/g++.dg/abi/mangle29.C | 14 ++++++++++++++ 7 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/abi/mangle26.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle27.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle28.C create mode 100644 gcc/testsuite/g++.dg/abi/mangle29.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d7fd5ea..4033dc3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-09-13 Bastian Blank + + PR c++/16171 + * mangle.c (find_substitution): Do not use special substitutions + for identifiers not in std::. + 2005-09-13 Mark Mitchell PR c++/23839 diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 5cae850..9dca2a5 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -606,20 +606,19 @@ find_substitution (tree node) SUBID_CHAR_TRAITS)) { /* Got them. Is this basic_istream? */ - tree name = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)); - if (name == subst_identifiers[SUBID_BASIC_ISTREAM]) + if (is_std_substitution (decl, SUBID_BASIC_ISTREAM)) { write_string ("Si"); return 1; } /* Or basic_ostream? */ - else if (name == subst_identifiers[SUBID_BASIC_OSTREAM]) + else if (is_std_substitution (decl, SUBID_BASIC_OSTREAM)) { write_string ("So"); return 1; } /* Or basic_iostream? */ - else if (name == subst_identifiers[SUBID_BASIC_IOSTREAM]) + else if (is_std_substitution (decl, SUBID_BASIC_IOSTREAM)) { write_string ("Sd"); return 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8aaa169..c192765 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,10 @@ -2005-09-13 Mark Mitchell +2005-09-13 Bastian Blank + + PR c++/16171 + * g++.dg/abi/mangle26.C: New test. + * g++.dg/abi/mangle27.C: New test. + * g++.dg/abi/mangle28.C: New test. + * g++.dg/abi/mangle29.C: New test. PR c++/23839 * g++.dg/parse/register1.C: New test. diff --git a/gcc/testsuite/g++.dg/abi/mangle26.C b/gcc/testsuite/g++.dg/abi/mangle26.C new file mode 100644 index 0000000..cfec4b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle26.C @@ -0,0 +1,14 @@ +// Test of std mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + struct A { + virtual void f () { } + }; +} + +std::A a; + +// { dg-final { scan-assembler "\n_?_ZNSt1AC1Ev\[: \t\n\]" } } diff --git a/gcc/testsuite/g++.dg/abi/mangle27.C b/gcc/testsuite/g++.dg/abi/mangle27.C new file mode 100644 index 0000000..da4efba --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle27.C @@ -0,0 +1,14 @@ +// Test of std::basic_iostream > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template struct char_traits; + + template struct basic_iostream { basic_iostream(){} }; +} + +std::basic_iostream > s1; + +// { dg-final { scan-assembler "\n_?_ZNSdC1Ev\[: \t\n\]" } } diff --git a/gcc/testsuite/g++.dg/abi/mangle28.C b/gcc/testsuite/g++.dg/abi/mangle28.C new file mode 100644 index 0000000..b8c40ca --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle28.C @@ -0,0 +1,14 @@ +// Test of std::basic_istream > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template struct char_traits; + + template struct basic_istream { basic_istream(){} }; +} + +std::basic_istream > s1; + +// { dg-final { scan-assembler "\n_?_ZNSiC1Ev\[: \t\n\]" } } diff --git a/gcc/testsuite/g++.dg/abi/mangle29.C b/gcc/testsuite/g++.dg/abi/mangle29.C new file mode 100644 index 0000000..4f64efb --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle29.C @@ -0,0 +1,14 @@ +// Test of std::basic_ostream > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template struct char_traits; + + template struct basic_ostream { basic_ostream(){} }; +} + +std::basic_ostream > s1; + +// { dg-final { scan-assembler "\n_?_ZNSoC1Ev\[: \t\n\]" } } -- 2.7.4