+2002-11-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/linker-map.gnu: Export string operator+.
+ Export __default_alloc_template::_S_force_new.
+ * testsuite/abi_check.cc: Output tweaks.
+
+2002-11-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/8172
+ * src/string-inst.cc: Add instantiation.
+
+2002-11-04 Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
+
+ PR libstdc++/8197
+ * config/link-map.gnu: Export math stubbs.
+
+2002-11-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/8318
+ * include/std/std_iostream.h: Tweak.
+ * include/std/std_iosfwd.h: Add _GLIBCPP_USE_WCHAR_T.
+ * include/std/std_iomanip.h: Same.
+ * include/bits/stringfwd.h: Same.
+ * include/bits/basic_string.tcc: Same.
+ * include/bits/sstream.tcc: Same.
+ * include/bits/fstream.tcc: Same.
+ * include/bits/basic_ios.tcc: Same.
+ * include/bits/streambuf.tcc: Same.
+ * include/bits/locale_facets.tcc: Same.
+
2002-11-01 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/8348
# All but the last are terminated with a semicolon.
extern "C++"
{
- std::[A-Za-k]*;
+ std::[A-Za]*;
+ std::ba[a-r]*;
+ std::basic_[a-r]*;
+ std::basic_streambuf*;
+ std::basic_stringbuf*;
+ std::basic_stringstream*;
+ std::basic_[t-z]*;
+ std::ba[t-z]*;
+ std::b[b-z]*;
+ std::c[a-n]*;
+ std::co[a-c]*;
+ std::codecvt_byname*;
+ std::codecvt::[A-Za-b]*;
+ std::codecvt::[A-Zd-z]*;
+ std::codecvt_c;
+ std::codecvt_w;
+ std::co[e-z]*;
+ std::c[p-z]*;
+ std::c_[a-z]*;
+ std::[A-Zd-k]*;
std::length_error*;
std::logic_error*;
std::locale::[A-Za-z]*;
std::__timepunct*;
std::__numeric_limits_base*;
std::_S_bit_count;
- std::_S_first_one;
- std::__default_alloc_template*;
- std::__malloc_alloc_template*
+ std::_S_first_one
};
# Names not in an 'extern' block are mangled names.
+ # std::string minus binary operator plus
+ _ZNKSs*;
+ _ZNKSb*;
+ _ZNSs[A-Za-z]*;
+ _ZNSs[0-9][A-Za-z]*;
+ _ZNSs[0-9][0-9][A-Za-z]*;
+ _ZNSs[0-9]_[A-Ra-z]*;
+ _ZNSs[0-9][0-9]_[A-Ra-z]*;
+ _ZNSs12_S_empty_repEv;
+ _ZNSs20_S_empty_rep_storageE;
+ _ZNSbIwSt11char_traitsIwESaIwEE20_S_empty_rep_storageE;
+ _ZNSs12_S_constructEjcRKSaIcE;
+ _ZNSs13_S_copy_chars*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[A-Ra-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-9][A-Ra-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-9][0-9][A-Ra-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-9]_[A-Ra-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[0-9][0-9]_[A-Ra-z]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_chars*;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv;
+ _ZSt24__uninitialized_copy_auxIN9*;
+ _ZSt26__uninitialized_fill_n_aux*;
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_;
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES3_RKS6_;
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_EPKS3_RKS6_;
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ES3_RKS6_;
+
# std::locale destructors
_ZNSt6localeD*;
+ # std::codecvt<char> members.
+ _ZNKSt7codecvtIcc11__mbstate_tE*;
+ # std::codecvt<char>::~codecvt
+ _ZNSt7codecvtIcc11__mbstate_tED*;
+ # std::codecvt<char>::codecvt(size_t), where size_t variable.
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej;
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej;
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em;
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em;
+ # std::codecvt<char>::id
+ _ZNSt7codecvtIcc11__mbstate_tE2idE;
+
+ # std::codecvt<wchar_t> members.
+ _ZNKSt7codecvtIwc11__mbstate_tE*;
+ # std::codecvt<wchar_t>::~codecvt
+ _ZNSt7codecvtIwc11__mbstate_tED*;
+ # std::codecvt<wchar_t>::codecvt(size_t), where size_t variable.
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej;
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej;
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em;
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em;
+ # std::codecvt<wchar_t>::id
+ _ZNSt7codecvtIwc11__mbstate_tE2idE;
+
+ # std::use_facet<codecvt>
+ _ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale;
+ _ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale;
+
# std::has_facet*
_ZSt9has_facet*;
+ # std::__default_alloc_template
+ _ZNSt24__default_alloc_templateILb1ELi0EE10deallocate*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE8allocate*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE12_S_free_listE;
+ _ZNSt24__default_alloc_templateILb1ELi0EE22_S_node_allocator_lockE;
+ _ZNSt24__default_alloc_templateILb1ELi0EE9_S_refillE*;
+
+ # std::__default_alloc_template to be removed in the future
+ _ZNSt24__default_alloc_templateILb1ELi0EE10reallocateEPv*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE11_S_round_upE*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE14_S_chunk_allocE*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE17_S_freelist_indexE*;
+ _ZNSt24__default_alloc_templateILb1ELi0EE11_S_end_freeE;
+ _ZNSt24__default_alloc_templateILb1ELi0EE12_S_heap_sizeE;
+ _ZNSt24__default_alloc_templateILb1ELi0EE13_S_start_freeE;
+ _ZNSt24__default_alloc_templateILb1ELi0EE5_Lock*;
+
# operator new(unsigned)
_Znwj;
# operator new(unsigned, std::nothrow_t const&)
*;
};
+# Symbols added after GLIBCPP_3.2
+GLIBCPP_3.2.1 {
+
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj;
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj;
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj;
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj;
+
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_;
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ERKS6_S8_;
+
+ _ZNSt24__default_alloc_templateILb1ELi0EE12_S_force_newE;
+
+ # stub functions from libmath
+ sinf;
+ sinl;
+ sinhf;
+ sinhl;
+ cosf;
+ cosl;
+ coshf;
+ coshl;
+ tanf;
+ tanl;
+ tanhf;
+ tanhl;
+ atan2f;
+ atan2l;
+ expf;
+ expl;
+ hypotf;
+ hypotl;
+ hypot;
+ logf;
+ logl;
+ log10f;
+ log10l;
+ powf;
+ powl;
+ sqrtf;
+ sqrtl;
+ copysignf;
+ nan;
+ __signbit;
+ __signbitf;
+ __signbitl;
+
+} GLIBCPP_3.2;
+
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.2 {
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
extern template class basic_ios<char>;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
extern template class basic_ios<wchar_t>;
+#endif
} // namespace std
#endif
basic_istream<char>&
getline(basic_istream<char>&, string&);
+#ifdef _GLIBCPP_USE_WCHAR_T
extern template class basic_string<wchar_t>;
extern template
basic_istream<wchar_t>&
extern template
basic_istream<wchar_t>&
getline(basic_istream<wchar_t>&, wstring&);
+#endif
} // namespace std
#endif
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
extern template class basic_filebuf<char>;
- extern template class basic_filebuf<wchar_t>;
extern template class basic_ifstream<char>;
- extern template class basic_ifstream<wchar_t>;
extern template class basic_ofstream<char>;
- extern template class basic_ofstream<wchar_t>;
extern template class basic_fstream<char>;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ extern template class basic_filebuf<wchar_t>;
+ extern template class basic_ifstream<wchar_t>;
+ extern template class basic_ofstream<wchar_t>;
extern template class basic_fstream<wchar_t>;
+#endif
} // namespace std
#endif
extern template class moneypunct_byname<char, true>;
extern template class money_get<char>;
extern template class money_put<char>;
- extern template class moneypunct<wchar_t, false>;
- extern template class moneypunct<wchar_t, true>;
- extern template class moneypunct_byname<wchar_t, false>;
- extern template class moneypunct_byname<wchar_t, true>;
- extern template class money_get<wchar_t>;
- extern template class money_put<wchar_t>;
extern template class numpunct<char>;
extern template class numpunct_byname<char>;
extern template class num_get<char>;
extern template class num_put<char>;
- extern template class numpunct<wchar_t>;
- extern template class numpunct_byname<wchar_t>;
- extern template class num_get<wchar_t>;
- extern template class num_put<wchar_t>;
extern template class __timepunct<char>;
extern template class time_put<char>;
extern template class time_put_byname<char>;
extern template class time_get<char>;
extern template class time_get_byname<char>;
- extern template class __timepunct<wchar_t>;
- extern template class time_put<wchar_t>;
- extern template class time_put_byname<wchar_t>;
- extern template class time_get<wchar_t>;
- extern template class time_get_byname<wchar_t>;
extern template class messages<char>;
extern template class messages_byname<char>;
- extern template class messages<wchar_t>;
- extern template class messages_byname<wchar_t>;
extern template class ctype_byname<char>;
- extern template class ctype_byname<wchar_t>;
extern template class codecvt_byname<char, char, mbstate_t>;
- extern template class codecvt_byname<wchar_t, char, mbstate_t>;
extern template class collate<char>;
extern template class collate_byname<char>;
- extern template class collate<wchar_t>;
- extern template class collate_byname<wchar_t>;
extern template
const codecvt<char, char, mbstate_t>&
const messages<char>&
use_facet<messages<char> >(const locale&);
- extern template
- const codecvt<wchar_t, char, mbstate_t>&
- use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
-
- extern template
- const collate<wchar_t>&
- use_facet<collate<wchar_t> >(const locale&);
-
- extern template
- const numpunct<wchar_t>&
- use_facet<numpunct<wchar_t> >(const locale&);
-
- extern template
- const num_put<wchar_t>&
- use_facet<num_put<wchar_t> >(const locale&);
-
- extern template
- const num_get<wchar_t>&
- use_facet<num_get<wchar_t> >(const locale&);
-
- extern template
- const moneypunct<wchar_t, true>&
- use_facet<moneypunct<wchar_t, true> >(const locale&);
-
- extern template
- const moneypunct<wchar_t, false>&
- use_facet<moneypunct<wchar_t, false> >(const locale&);
-
- extern template
- const money_put<wchar_t>&
- use_facet<money_put<wchar_t> >(const locale&);
-
- extern template
- const money_get<wchar_t>&
- use_facet<money_get<wchar_t> >(const locale&);
-
- extern template
- const __timepunct<wchar_t>&
- use_facet<__timepunct<wchar_t> >(const locale&);
-
- extern template
- const time_put<wchar_t>&
- use_facet<time_put<wchar_t> >(const locale&);
-
- extern template
- const time_get<wchar_t>&
- use_facet<time_get<wchar_t> >(const locale&);
-
- extern template
- const messages<wchar_t>&
- use_facet<messages<wchar_t> >(const locale&);
-
-
extern template
bool
has_facet<ctype<char> >(const locale&);
bool
has_facet<messages<char> >(const locale&);
+#ifdef _GLIBCPP_USE_WCHAR_T
+ extern template class moneypunct<wchar_t, false>;
+ extern template class moneypunct<wchar_t, true>;
+ extern template class moneypunct_byname<wchar_t, false>;
+ extern template class moneypunct_byname<wchar_t, true>;
+ extern template class money_get<wchar_t>;
+ extern template class money_put<wchar_t>;
+ extern template class numpunct<wchar_t>;
+ extern template class numpunct_byname<wchar_t>;
+ extern template class num_get<wchar_t>;
+ extern template class num_put<wchar_t>;
+ extern template class __timepunct<wchar_t>;
+ extern template class time_put<wchar_t>;
+ extern template class time_put_byname<wchar_t>;
+ extern template class time_get<wchar_t>;
+ extern template class time_get_byname<wchar_t>;
+ extern template class messages<wchar_t>;
+ extern template class messages_byname<wchar_t>;
+ extern template class ctype_byname<wchar_t>;
+ extern template class codecvt_byname<wchar_t, char, mbstate_t>;
+ extern template class collate<wchar_t>;
+ extern template class collate_byname<wchar_t>;
+
+ extern template
+ const codecvt<wchar_t, char, mbstate_t>&
+ use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
+
+ extern template
+ const collate<wchar_t>&
+ use_facet<collate<wchar_t> >(const locale&);
+
+ extern template
+ const numpunct<wchar_t>&
+ use_facet<numpunct<wchar_t> >(const locale&);
+
+ extern template
+ const num_put<wchar_t>&
+ use_facet<num_put<wchar_t> >(const locale&);
+
+ extern template
+ const num_get<wchar_t>&
+ use_facet<num_get<wchar_t> >(const locale&);
+
+ extern template
+ const moneypunct<wchar_t, true>&
+ use_facet<moneypunct<wchar_t, true> >(const locale&);
+
+ extern template
+ const moneypunct<wchar_t, false>&
+ use_facet<moneypunct<wchar_t, false> >(const locale&);
+
+ extern template
+ const money_put<wchar_t>&
+ use_facet<money_put<wchar_t> >(const locale&);
+
+ extern template
+ const money_get<wchar_t>&
+ use_facet<money_get<wchar_t> >(const locale&);
+
+ extern template
+ const __timepunct<wchar_t>&
+ use_facet<__timepunct<wchar_t> >(const locale&);
+
+ extern template
+ const time_put<wchar_t>&
+ use_facet<time_put<wchar_t> >(const locale&);
+
+ extern template
+ const time_get<wchar_t>&
+ use_facet<time_get<wchar_t> >(const locale&);
+
+ extern template
+ const messages<wchar_t>&
+ use_facet<messages<wchar_t> >(const locale&);
+
extern template
bool
has_facet<ctype<wchar_t> >(const locale&);
extern template
bool
has_facet<messages<wchar_t> >(const locale&);
+#endif
} // namespace std
#endif
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
extern template class basic_stringbuf<char>;
- extern template class basic_stringbuf<wchar_t>;
extern template class basic_istringstream<char>;
- extern template class basic_istringstream<wchar_t>;
extern template class basic_ostringstream<char>;
- extern template class basic_ostringstream<wchar_t>;
extern template class basic_stringstream<char>;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ extern template class basic_stringbuf<wchar_t>;
+ extern template class basic_istringstream<wchar_t>;
+ extern template class basic_ostringstream<wchar_t>;
extern template class basic_stringstream<wchar_t>;
+#endif
} // namespace std
#endif
__copy_streambufs(basic_ios<char>&, basic_streambuf<char>*,
basic_streambuf<char>*);
+#ifdef _GLIBCPP_USE_WCHAR_T
extern template class basic_streambuf<wchar_t>;
extern template
streamsize
__copy_streambufs(basic_ios<wchar_t>&, basic_streambuf<wchar_t>*,
basic_streambuf<wchar_t>*);
+#endif
} // namespace std
#endif
namespace std
{
- template<class _CharT>
- struct char_traits;
-
- template<> struct char_traits<char>;
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<> struct char_traits<wchar_t>;
-#endif
-
template<typename _Alloc>
class allocator;
+ template<class _CharT>
+ struct char_traits;
+
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_string;
+
+ template<> struct char_traits<char>;
typedef basic_string<char> string;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<> struct char_traits<wchar_t>;
+
typedef basic_string<wchar_t> wstring;
+#endif
} // namespace std
#endif // _CPP_BITS_STRINGFWD_H
extern template ostream& operator<<(ostream&, _Setbase);
extern template ostream& operator<<(ostream&, _Setprecision);
extern template ostream& operator<<(ostream&, _Setw);
- extern template wostream& operator<<(wostream&, _Setfill<wchar_t>);
- extern template wostream& operator<<(wostream&, _Setiosflags);
- extern template wostream& operator<<(wostream&, _Resetiosflags);
- extern template wostream& operator<<(wostream&, _Setbase);
- extern template wostream& operator<<(wostream&, _Setprecision);
- extern template wostream& operator<<(wostream&, _Setw);
-
extern template istream& operator>>(istream&, _Setfill<char>);
extern template istream& operator>>(istream&, _Setiosflags);
extern template istream& operator>>(istream&, _Resetiosflags);
extern template istream& operator>>(istream&, _Setbase);
extern template istream& operator>>(istream&, _Setprecision);
extern template istream& operator>>(istream&, _Setw);
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ extern template wostream& operator<<(wostream&, _Setfill<wchar_t>);
+ extern template wostream& operator<<(wostream&, _Setiosflags);
+ extern template wostream& operator<<(wostream&, _Resetiosflags);
+ extern template wostream& operator<<(wostream&, _Setbase);
+ extern template wostream& operator<<(wostream&, _Setprecision);
+ extern template wostream& operator<<(wostream&, _Setw);
extern template wistream& operator>>(wistream&, _Setfill<wchar_t>);
extern template wistream& operator>>(wistream&, _Setiosflags);
extern template wistream& operator>>(wistream&, _Resetiosflags);
extern template wistream& operator>>(wistream&, _Setbase);
extern template wistream& operator>>(wistream&, _Setprecision);
extern template wistream& operator>>(wistream&, _Setw);
+#endif
} // namespace std
#endif
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char> fstream;
+#ifdef _GLIBCPP_USE_WCHAR_T
typedef basic_ios<wchar_t> wios;
typedef basic_streambuf<wchar_t> wstreambuf;
typedef basic_istream<wchar_t> wistream;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t> wfstream;
+#endif
} // namespace std
#endif
extern ostream cout;
extern ostream cerr;
extern ostream clog;
+
#ifdef _GLIBCPP_USE_WCHAR_T
extern wistream wcin;
extern wostream wcout;
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
template class basic_string<C>;
template S operator+(const C*, const S&);
template S operator+(C, const S&);
+ template S operator+(const S&, const S&);
} // namespace std
namespace __gnu_cxx
if (verbose)
{
cout << tab << "incompatible sizes" << endl;
+ cout << tab << lhs.size << endl;
+ cout << tab << rhs.size << endl;
}
}
if (verbose)
{
cout << tab << "incompatible versions" << endl;
+ cout << tab << lhs.version_name << endl;
+ cout << tab << rhs.version_name << endl;
}
}
+ if (verbose)
+ cout << endl;
+
return ret;
}
}
void
-report_symbol_info(const symbol_info& symbol, std::size_t n)
+report_symbol_info(const symbol_info& symbol, std::size_t n, bool ret = true)
{
using namespace std;
const char tab = '\t';
cout << tab << "demangled symbol"<< endl;
cout << tab << symbol.demangled_name << endl;
- cout << endl;
+ if (ret)
+ cout << endl;
}
test.name);
if (it1 == end && it2 == end)
- incompatible.push_back(symbol_pair(test, test));
+ {
+ incompatible.push_back(symbol_pair(test, test));
+ cout << test.version_name << endl;
+ }
}
// Report results.
// First, report name.
const symbol_info& base = incompatible[j].first;
const symbol_info& test = incompatible[j].second;
- report_symbol_info(test, j + 1);
+ report_symbol_info(test, j + 1, false);
// Second, report reason or reasons incompatible.
check_compatible(base, test, true);