aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBastian Blank <waldi@debian.org>2005-09-13 15:15:37 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-09-13 15:15:37 +0000
commit3beac9100a2cb243f88591bab2ae74f36be71a7d (patch)
tree1e691a55dae74caad99952616ac3ffb85960b120 /gcc
parent7b09c6a4992b1b43eb00155f02b841969d48c5ae (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/mangle.c7
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle26.C14
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle27.C14
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle28.C14
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle29.C14
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\]" } }