diff options
author | Bastian Blank <waldi@debian.org> | 2005-09-13 15:15:37 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-09-13 15:15:37 +0000 |
commit | 3beac9100a2cb243f88591bab2ae74f36be71a7d (patch) | |
tree | 1e691a55dae74caad99952616ac3ffb85960b120 /gcc | |
parent | 7b09c6a4992b1b43eb00155f02b841969d48c5ae (diff) | |
download | gcc-3beac9100a2cb243f88591bab2ae74f36be71a7d.zip gcc-3beac9100a2cb243f88591bab2ae74f36be71a7d.tar.gz gcc-3beac9100a2cb243f88591bab2ae74f36be71a7d.tar.bz2 |
re PR c++/16171 ([ABI] Problems with standard names in different namespaces)
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.
From-SVN: r104228
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle26.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle27.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle28.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle29.C | 14 |
7 files changed, 72 insertions, 5 deletions
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 <waldi@debian.org> + + PR c++/16171 + * mangle.c (find_substitution): Do not use special substitutions + for identifiers not in std::. + 2005-09-13 Mark Mitchell <mark@codesourcery.com> 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 <mark@codesourcery.com> +2005-09-13 Bastian Blank <waldi@debian.org> + + 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<char, std::char_traits<char> > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template<typename> struct char_traits; + + template<typename, typename> struct basic_iostream { basic_iostream(){} }; +} + +std::basic_iostream<char,std::char_traits<char> > 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<char, std::char_traits<char> > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template<typename> struct char_traits; + + template<typename, typename> struct basic_istream { basic_istream(){} }; +} + +std::basic_istream<char,std::char_traits<char> > 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<char, std::char_traits<char> > mangling + +// { dg-do compile } +// { dg-options "-fno-inline" } + +namespace std { + template<typename> struct char_traits; + + template<typename, typename> struct basic_ostream { basic_ostream(){} }; +} + +std::basic_ostream<char,std::char_traits<char> > s1; + +// { dg-final { scan-assembler "\n_?_ZNSoC1Ev\[: \t\n\]" } } |