Marshall Clow
							
						 
						
							 
							
							
							
							
								
							
							
								e5cc2fcc90 
								
							 
						 
						
							
							
								
								make sure that we don't call basic_streambuf::gbump with a value bigger than INT_MAX, since it only takes an int. Related to, but not quite the same as PR33725  
							
							 
							
							... 
							
							
							
							llvm-svn: 308880 
							
						 
						
							2017-07-24 14:05:10 +00:00  
						
					 
				
					
						
							
							
								 
								Eric Fiselier
							
						 
						
							 
							
							
							
							
								
							
							
								a016efb1dc 
								
							 
						 
						
							
							
								
								[Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows  
							
							 
							
							... 
							
							
							
							Summary:
This patch improves how libc++ handles min/max macros within the headers. Previously libc++ would undef them and emit a warning.
This patch changes libc++ to use `#pragma push_macro`  to save the macro before undefining it, and `#pragma pop_macro` to restore the macros and the end of the header.
Reviewers: mclow.lists, bcraig, compnerd, EricWF
Reviewed By: EricWF
Subscribers: cfe-commits, krytarowski
Differential Revision: https://reviews.llvm.org/D33080 
llvm-svn: 304357 
							
						 
						
							2017-05-31 22:07:49 +00:00  
						
					 
				
					
						
							
							
								 
								Mehdi Amini
							
						 
						
							 
							
							
							
							
								
							
							
								e9c66ad9fa 
								
							 
						 
						
							
							
								
								Add markup for libc++ dylib availability  
							
							 
							
							... 
							
							
							
							Libc++ is used as a system library on macOS and iOS (amongst others). In order
for users to be able to compile a binary that is intended to be deployed to an
older version of the platform, clang provides the
availability attribute <https://clang.llvm.org/docs/AttributeReference.html#availability >_
that can be placed on declarations to describe the lifecycle of a symbol in the
library.
See docs/DesignDocs/AvailabilityMarkup.rst for more information.
Differential Revision: https://reviews.llvm.org/D31739 
llvm-svn: 302172 
							
						 
						
							2017-05-04 17:08:54 +00:00  
						
					 
				
					
						
							
							
								 
								Eric Fiselier
							
						 
						
							 
							
							
							
							
								
							
							
								e2f2d1edef 
								
							 
						 
						
							
							
								
								[NFC] Rename _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS  
							
							 
							
							... 
							
							
							
							The name _LIBCPP_TYPE_VIS_ONLY is no longer accurate because both
_LIBCPP_TYPE_VIS and _LIBCPP_TYPE_VIS_ONLY expand to
__attribute__((__type_visibility__)) with Clang. The only remaining difference
is that _LIBCPP_TYPE_VIS_ONLY can be applied to templates whereas
_LIBCPP_TYPE_VIS cannot (due to dllimport/dllexport not being allowed on
templates).
This patch renames _LIBCPP_TYPE_VIS_ONLY to _LIBCPP_TEMPLATE_VIS.
llvm-svn: 291035 
							
						 
						
							2017-01-04 23:56:00 +00:00  
						
					 
				
					
						
							
							
								 
								Eric Fiselier
							
						 
						
							 
							
							
							
							
								
							
							
								f8f31c4985 
								
							 
						 
						
							
							
								
								[libc++] Add _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY to support GCC ABI compatibility  
							
							 
							
							... 
							
							
							
							Summary:
GCC and Clang handle visibility attributes on the out-of-line definition of externally instantiated templates differently. For example in the reproducer below Clang will emit both 'foo' and 'bar' with default visibility while GCC only emits a non-hidden 'foo'.  
```
// RUN: g++ -std=c++11 -shared -O3 test.cpp && sym_extract.py a.out
// RUN: clang++ -std=c++11 -shared -O3 test.cpp && sym_extract.py a.out
#define INLINE_VISIBILITY __attribute__((visibility("hidden"), always_inline))
template <class T>
struct Foo {
  void foo();
  void bar();
};
template <class T>
void Foo<T>::foo() {}
template <class T>
inline INLINE_VISIBILITY
void Foo<T>::bar() {}
template struct Foo<int>;
```
This difference creates ABI incompatibilities between Clang and GCC built dylibs. Specifically GCC built dylibs lack definitions for various member functions of `basic_string`, `basic_istream`, `basic_ostream`, `basic_iostream`, and `basic_streambuf` (All of these types are externally instantiated). 
Surprisingly these missing symbols don't cause many problems because the functions are marked `always_inline`  therefore the dylib definition is rarely needed. However when an out-of-line definition is required then GCC built dylibs will fail to link. For example [GCC built dylibs cannot build Clang](http://stackoverflow.com/questions/39454262/clang-build-errors ).
This patch works around this issue by adding `_LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY` which is used to mark externally instantiated member functions as always inline. When building the library `_LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY` sets the symbol's visibility to "default" instead of "hidden", otherwise it acts exactly the same as `_LIBCPP_INLINE_VISIBILITY`.
After applying this patch GCC dylibs now contain:
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7sungetcEv`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5gbumpEi`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7sungetcEv`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9sputbackcEc`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERNS_15basic_streambufIwS2_EE`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_9basic_iosIwS2_EES6_E`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setpEPcS4_`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6snextcEv`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4swapERS3_`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4swapERS3_`
  * `_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_8ios_baseES5_E`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pubsetbufEPcl`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekoffExNS_8ios_base7seekdirEj`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_9basic_iosIwS2_EES6_E`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5pbumpEi`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpENS_4fposI11__mbstate_tEE`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPcl`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetcEv`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_8ios_baseES5_E`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8in_availEv`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_8ios_baseES5_E`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6sbumpcEv`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_9basic_iosIcS2_EES6_E`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERc`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6snextcEv`
  * `_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwl`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5tellpEv`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERw`
  * `_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7pubsyncEv`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPcl`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_9basic_iosIcS2_EES6_E`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7pubsyncEv`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputcEc`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpExNS_8ios_base7seekdirE`
  * `_ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE6getlocEv`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5gbumpEi`
  * `_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEE4swapERS3_`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpENS_4fposI11__mbstate_tEE`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5tellpEv`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRS3_S4_E`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwl`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRS3_S4_E`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setgEPcS4_S4_`
  * `_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setgEPwS4_S4_`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8pubimbueERKNS_6localeE`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE4swapERS3_`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekposENS_4fposI11__mbstate_tEEj`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5pbumpEi`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetcEv`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE4swapERS3_`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekposENS_4fposI11__mbstate_tEEj`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputnEPKcl`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpExNS_8ios_base7seekdirE`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetnEPwl`
  * `_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_8ios_baseES5_E`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setpEPwS4_`
  * `_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetnEPcl`
  * `_ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE6getlocEv`
  * `_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8pubimbueERKNS_6localeE`
  * `_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8in_availEv`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6sbumpcEv`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekoffExNS_8ios_base7seekdirEj`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRS3_S4_E`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9sputbackcEw`
  * `_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputnEPKwl`
  * `_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRS3_S4_E`
  * `_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pubsetbufEPwl`
  * `_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputcEw`
This patch has no effect on Clang based builds.
Reviewers: mclow.lists, eugenis, danalbert, jroelofs, EricWF
Subscribers: beanz, cfe-commits, mgorny
Differential Revision: https://reviews.llvm.org/D24600 
llvm-svn: 281681 
							
						 
						
							2016-09-16 00:00:48 +00:00  
						
					 
				
					
						
							
							
								 
								Eric Fiselier
							
						 
						
							 
							
							
							
							
								
							
							
								49e2967f27 
								
							 
						 
						
							
							
								
								[libc++] Fix and document visibility attributes for Clang, GCC and Windows.  
							
							 
							
							... 
							
							
							
							Summary:
This patch fixes a number of problems with the visibility macros across GCC (on Unix) and Windows (DLL import/export semantics). All of the visibility macros are now documented under `DesignDocs/VisibilityMacros.rst`. Now I'll no longer forget the subtleties of each!
This patch adds two new visibility macros:
* `_LIBCPP_ENUM_VIS` for controlling the typeinfo of enum types. Only Clang supports this.
* `_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS` for redefining visibility on explicit instantiation declarations. Clang and Windows require this.
After applying this patch GCC only emits one -Wattribute warning opposed to 30+.
Reviewers: mclow.lists, EricWF
Subscribers: beanz, mgorny, cfe-commits
Differential Revision: https://reviews.llvm.org/D24602 
llvm-svn: 281673 
							
						 
						
							2016-09-15 22:27:07 +00:00  
						
					 
				
					
						
							
							
								 
								Evandro Menezes
							
						 
						
							 
							
							
							
							
								
							
							
								72d6a934cc 
								
							 
						 
						
							
							
								
								[streambuf] Added call to traits_type::copy to common case in xsgetn()  
							
							 
							
							... 
							
							
							
							Patch by Laman Sole <laxman.g@partner.samsung.com>, Sebastian Pop
<s.pop@samsung.com>, Aditya Kumar <aditya.k7@samsung.com>
Differential Revision: http://reviews.llvm.org/D21103 
llvm-svn: 272401 
							
						 
						
							2016-06-10 16:00:29 +00:00  
						
					 
				
					
						
							
							
								 
								Evgeniy Stepanov
							
						 
						
							 
							
							
							
							
								
							
							
								c86b392078 
								
							 
						 
						
							
							
								
								Revert "Remove visibility attributes from out-of-class method definitions in iostreams."  
							
							 
							
							... 
							
							
							
							llvm-svn: 257193 
							
						 
						
							2016-01-08 19:21:02 +00:00  
						
					 
				
					
						
							
							
								 
								Evgeniy Stepanov
							
						 
						
							 
							
							
							
							
								
							
							
								26ba3870bf 
								
							 
						 
						
							
							
								
								Remove visibility attributes from out-of-class method definitions in iostreams.  
							
							 
							
							... 
							
							
							
							No point in pretending that these methods are hidden - they are
actually exported from libc++.so. Extern template declarations make
them part of libc++ ABI.
This patch does not change libc++.so export list (at least on Linux).
llvm-svn: 255177 
							
						 
						
							2015-12-09 23:42:30 +00:00  
						
					 
				
					
						
							
							
								 
								Marshall Clow
							
						 
						
							 
							
							
							
							
								
							
							
								09921a571f 
								
							 
						 
						
							
							
								
								Make basic_streambuf::xsputn write characters in chunks whenever possible, instead of one at a time. References PR#10193  
							
							 
							
							... 
							
							
							
							llvm-svn: 229866 
							
						 
						
							2015-02-19 16:17:46 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								f0544c2086 
								
							 
						 
						
							
							
								
								Nico Rieck:  this patch series fixes visibility issues on Windows as explained in < http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html >.  
							
							 
							
							... 
							
							
							
							llvm-svn: 188192 
							
						 
						
							2013-08-12 18:38:34 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								6e41256f68 
								
							 
						 
						
							
							
								
								No functionality change at this time.  I've split _LIBCPP_VISIBLE up into two flags: _LIBCPP_TYPE_VIS and _LIBCPP_FUNC_VIS.  This is in preparation for taking advantage of clang's new __type_visibility__ attribute.  
							
							 
							
							... 
							
							
							
							llvm-svn: 176593 
							
						 
						
							2013-03-06 23:30:19 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								cd47cbc7a4 
								
							 
						 
						
							
							
								
								Provide a way to disable use of extern templates in libc++.  This is intended for the clients of libc++, not the libc++ build.  The dylib should always contain the extern templates.  To disable the client needs to put -D'_LIBCPP_EXTERN_TEMPLATE(...)=' on the command line.  
							
							 
							
							... 
							
							
							
							llvm-svn: 167486 
							
						 
						
							2012-11-06 21:08:48 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								6758190507 
								
							 
						 
						
							
							
								
								Use traits_type::to_int_type in basic_streambuf<_CharT, _Traits>::xsputn when calling overflow to correctly handle negative signed character types.  This fixes  http://llvm.org/bugs/show_bug.cgi?id=14074 .  
							
							 
							
							... 
							
							
							
							llvm-svn: 165884 
							
						 
						
							2012-10-13 19:31:51 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								c206366fd7 
								
							 
						 
						
							
							
								
								Quash a whole bunch of warnings  
							
							 
							
							... 
							
							
							
							llvm-svn: 145624 
							
						 
						
							2011-12-01 20:21:04 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								073458b1ab 
								
							 
						 
						
							
							
								
								Windows support by Ruben Van Boxem.  
							
							 
							
							... 
							
							
							
							llvm-svn: 142235 
							
						 
						
							2011-10-17 20:05:10 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								ce48a1137d 
								
							 
						 
						
							
							
								
								_STD -> _VSTD to avoid macro clash on windows  
							
							 
							
							... 
							
							
							
							llvm-svn: 134190 
							
						 
						
							2011-06-30 21:18:19 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								412dbebe1b 
								
							 
						 
						
							
							
								
								license change  
							
							 
							
							... 
							
							
							
							llvm-svn: 119395 
							
						 
						
							2010-11-16 22:09:02 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								e060133553 
								
							 
						 
						
							
							
								
								visibility-decoration.  
							
							 
							
							... 
							
							
							
							llvm-svn: 114671 
							
						 
						
							2010-09-23 17:31:07 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								b3371f6f49 
								
							 
						 
						
							
							
								
								Fixing whitespace problems  
							
							 
							
							... 
							
							
							
							llvm-svn: 111750 
							
						 
						
							2010-08-22 00:02:43 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								5b08a8a432 
								
							 
						 
						
							
							
								
								Wiped out some non-ascii characters that snuck into the copyright.  
							
							 
							
							... 
							
							
							
							llvm-svn: 103516 
							
						 
						
							2010-05-11 21:36:01 +00:00  
						
					 
				
					
						
							
							
								 
								Howard Hinnant
							
						 
						
							 
							
							
							
							
								
							
							
								3e519524c1 
								
							 
						 
						
							
							
								
								libcxx initial import  
							
							 
							
							... 
							
							
							
							llvm-svn: 103490 
							
						 
						
							2010-05-11 19:42:16 +00:00