This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[C++0x] fix libstdc++/41005 - missing fstream instantiations
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: "libstdc++" <libstdc++ at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 12 Aug 2009 19:34:46 +0100
- Subject: [C++0x] fix libstdc++/41005 - missing fstream instantiations
We already compile src/string-inst.cc and src/wstring-inst.cc with
-std=gnu0x so that the new members are instantiated in the library,
this does the same for fstream-inst.cc.
PR libstdc++/41005
* src/Makefile.am (fstream-inst.o): Compile as C++0x.
* src/Makefile.in: Regenerate.
* config/abi/pre/gnu.ver: Add new exports and adjust old ones to
be more precise.
The linker script changes are necessary so that the new symbols are
not matched by the patterns in the 3.4 version. Tested x86_64/linux,
OK for trunk?
And 4.4 branch when I've tested it there?
How would I add the symbols to the 4.4 linker map? Would the fstream
ones go in 3.4.13 and then the <future> symbols on trunk get moved to
a new 3.4.14 version?
Jonathan
Index: src/Makefile.am
===================================================================
--- src/Makefile.am (revision 150675)
+++ src/Makefile.am (working copy)
@@ -278,6 +278,11 @@ atomic.lo: atomic.cc
atomic.o: atomic.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
+fstream-inst.lo: fstream-inst.cc
+ $(LTCXXCOMPILE) -std=gnu++0x -c $<
+fstream-inst.o: fstream-inst.cc
+ $(CXXCOMPILE) -std=gnu++0x -c $<
+
string-inst.lo: string-inst.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
string-inst.o: string-inst.cc
Index: config/abi/pre/gnu.ver
===================================================================
--- config/abi/pre/gnu.ver (revision 150675)
+++ config/abi/pre/gnu.ver (working copy)
@@ -32,7 +32,9 @@ GLIBCXX_3.4 {
std::a[e-z]*;
# std::ba[a-r]*;
std::basic_[a-e]*;
- std::basic_f[a-r]*;
+ std::basic_f[a-h]*;
+# std::basic_filebuf;
+ std::basic_f[j-r]*;
# std::basic_fstream;
std::basic_f[t-z]*;
std::basic_[g-h]*;
@@ -276,28 +278,40 @@ GLIBCXX_3.4 {
_ZNSdC*;
_ZNSdD*;
+ # std::basic_filebuf
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EEC*;
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EED*;
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE[0-3]*;
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4openEPKc*;
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4sync*;
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE[5-9]*;
+ _ZNKSt13basic_filebufI[cw]St11char_traitsI[cw]EE7is_openEv;
+
# std::basic_fstream
- _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC*;
+ _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]Ev;
+ _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*;
_ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EED*;
_ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE5closeEv;
_ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
- _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4open*;
+ _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4openEPKc*;
_ZNKSt13basic_fstreamI[cw]St11char_traitsI[cw]EE5rdbufEv;
# std::basic_ifstream
- _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC*;
+ _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]Ev;
+ _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*;
_ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EED*;
_ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE5closeEv;
_ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
- _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4open*;
+ _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4openEPKc*;
_ZNKSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE5rdbufEv;
# std::basic_ofstream
- _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC*;
+ _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]Ev;
+ _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*;
_ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EED*;
_ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE5closeEv;
_ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
- _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4open*;
+ _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4openEPKc*;
_ZNKSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE5rdbufEv;
# std::basic_istream<char>
@@ -980,6 +994,15 @@ GLIBCXX_3.4.13 {
_ZTISt12future_error;
_ZSt20__throw_future_errori;
+ # new fstream members
+ _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode;
+ _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode;
+ _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode;
+ _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode;
+ _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode;
+ _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode;
+ _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode;
+
} GLIBCXX_3.4.12;
# Symbols in the support library (libsupc++) have their own tag.