Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -330,6 +330,8 @@ # headers add_compile_flags_if_supported(-nostdinc++) +add_definitions(-D_LIBCPP_BUILDING_LIBRARY) + # Warning flags =============================================================== add_definitions(-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) add_compile_flags_if_supported( Index: include/__config =================================================================== --- include/__config +++ include/__config @@ -232,6 +232,12 @@ # endif #endif +#ifndef _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY +# ifdef _LIBCPP_MSVC +# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __forceinline +# endif +#endif + #ifndef _LIBCPP_EXCEPTION_ABI #define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS #endif @@ -286,6 +292,14 @@ #define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) #endif +#ifndef _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY +# ifdef _LIBCPP_BUILDING_LIBRARY +# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__visibility__("default"), __always_inline__)) +# else +# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY +# endif +#endif + #if defined(__clang__) // _LIBCPP_ALTERNATE_STRING_LAYOUT is an old name for Index: include/istream =================================================================== --- include/istream +++ include/istream @@ -188,12 +188,12 @@ virtual ~basic_istream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_istream(basic_istream&& __rhs); #endif // 27.7.1.1.2 Assign/swap: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_istream& operator=(basic_istream&& __rhs); #endif void swap(basic_istream& __rhs); @@ -304,7 +304,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>::basic_istream(basic_streambuf* __sb) : __gc_(0) { @@ -314,7 +314,6 @@ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template -inline _LIBCPP_INLINE_VISIBILITY basic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs) : __gc_(__rhs.__gc_) { @@ -323,7 +322,6 @@ } template -inline _LIBCPP_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs) { @@ -339,7 +337,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_istream<_CharT, _Traits>::swap(basic_istream& __rhs) { @@ -725,7 +723,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::operator>>(basic_istream& (*__pf)(basic_istream&)) { @@ -733,7 +731,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::operator>>(basic_ios& (*__pf)(basic_ios&)) @@ -743,7 +741,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::operator>>(ios_base& (*__pf)(ios_base&)) { @@ -947,7 +945,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::get(char_type& __c) { @@ -1006,7 +1004,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n) { @@ -1068,7 +1066,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::get(basic_streambuf& __sb) { @@ -1129,7 +1127,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n) { @@ -1507,13 +1505,13 @@ virtual ~basic_iostream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_iostream(basic_iostream&& __rhs); #endif // assign/swap #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_iostream& operator=(basic_iostream&& __rhs); #endif void swap(basic_iostream& __rhs); @@ -1521,7 +1519,7 @@ }; template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_iostream<_CharT, _Traits>::basic_iostream(basic_streambuf* __sb) : basic_istream<_CharT, _Traits>(__sb) { @@ -1530,14 +1528,12 @@ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template -inline _LIBCPP_INLINE_VISIBILITY basic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs) : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs)) { } template -inline _LIBCPP_INLINE_VISIBILITY basic_iostream<_CharT, _Traits>& basic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs) { @@ -1553,7 +1549,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_iostream<_CharT, _Traits>::swap(basic_iostream& __rhs) { Index: include/ostream =================================================================== --- include/ostream +++ include/ostream @@ -164,13 +164,13 @@ virtual ~basic_ostream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_ostream(basic_ostream&& __rhs); #endif // 27.7.2.3 Assign/swap #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - _LIBCPP_INLINE_VISIBILITY + inline _LIBCPP_INLINE_VISIBILITY basic_ostream& operator=(basic_ostream&& __rhs); #endif void swap(basic_ostream& __rhs); @@ -275,7 +275,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>::basic_ostream(basic_streambuf* __sb) { this->init(__sb); @@ -284,14 +284,12 @@ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES template -inline _LIBCPP_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) { this->move(__rhs); } template -inline _LIBCPP_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs) { @@ -307,7 +305,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_ostream<_CharT, _Traits>::swap(basic_ostream& __rhs) { @@ -315,7 +313,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(basic_ostream& (*__pf)(basic_ostream&)) { @@ -323,7 +321,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(basic_ios& (*__pf)(basic_ios&)) @@ -333,7 +331,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::operator<<(ios_base& (*__pf)(ios_base&)) { @@ -989,7 +987,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_ostream<_CharT, _Traits>::pos_type basic_ostream<_CharT, _Traits>::tellp() { @@ -999,7 +997,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::seekp(pos_type __pos) { @@ -1013,7 +1011,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir) { Index: include/streambuf =================================================================== --- include/streambuf +++ include/streambuf @@ -220,7 +220,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY locale basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) { @@ -231,7 +231,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY locale basic_streambuf<_CharT, _Traits>::getloc() const { @@ -239,7 +239,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY basic_streambuf<_CharT, _Traits>* basic_streambuf<_CharT, _Traits>::pubsetbuf(char_type* __s, streamsize __n) { @@ -247,7 +247,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::pos_type basic_streambuf<_CharT, _Traits>::pubseekoff(off_type __off, ios_base::seekdir __way, @@ -257,7 +257,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::pos_type basic_streambuf<_CharT, _Traits>::pubseekpos(pos_type __sp, ios_base::openmode __which) @@ -266,7 +266,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY int basic_streambuf<_CharT, _Traits>::pubsync() { @@ -274,7 +274,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY streamsize basic_streambuf<_CharT, _Traits>::in_avail() { @@ -284,7 +284,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::snextc() { @@ -294,7 +294,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::sbumpc() { @@ -304,7 +304,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::sgetc() { @@ -314,7 +314,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY streamsize basic_streambuf<_CharT, _Traits>::sgetn(char_type* __s, streamsize __n) { @@ -322,7 +322,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::sputbackc(char_type __c) { @@ -332,7 +332,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::sungetc() { @@ -342,7 +342,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>::sputc(char_type __c) { @@ -353,7 +353,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY streamsize basic_streambuf<_CharT, _Traits>::sputn(const char_type* __s, streamsize __n) { @@ -411,7 +411,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_streambuf<_CharT, _Traits>::gbump(int __n) { @@ -419,7 +419,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_streambuf<_CharT, _Traits>::setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) @@ -430,7 +430,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_streambuf<_CharT, _Traits>::pbump(int __n) { @@ -438,7 +438,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_streambuf<_CharT, _Traits>::setp(char_type* __pbeg, char_type* __pend) { Index: include/string =================================================================== --- include/string +++ include/string @@ -1430,7 +1430,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz, size_type __reserve) { @@ -1455,7 +1455,7 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz) { @@ -1593,7 +1593,7 @@ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY void basic_string<_CharT, _Traits, _Allocator>::__init(size_type __n, value_type __c) { @@ -1690,7 +1690,7 @@ template template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename enable_if < __is_exactly_input_iterator<_InputIterator>::value, @@ -1718,7 +1718,7 @@ template template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY typename enable_if < __is_forward_iterator<_ForwardIterator>::value, Index: utils/sym_check/sym_diff.py =================================================================== --- utils/sym_check/sym_diff.py +++ utils/sym_check/sym_diff.py @@ -24,6 +24,10 @@ help='Only print symbol names', action='store_true', default=False) parser.add_argument( + '--removed-only', dest='removed_only', + help='Only print removed symbols', + action='store_true', default=False) + parser.add_argument( '-o', '--output', dest='output', help='The output file. stdout is used if not given', type=str, action='store', default=None) @@ -41,6 +45,8 @@ new_syms_list = util.extract_or_load(args.new_syms) added, removed, changed = diff.diff(old_syms_list, new_syms_list) + if args.removed_only: + added = {} report, is_break = diff.report_diff(added, removed, changed, names_only=args.names_only, demangle=args.demangle)