Howard Hinnant 
							
						 
					 
					
						
						
							
						
						ec423cb8d4 
					 
					
						
						
							
							Fix basic_filebuf's internal buffer is shrinking when using with some codecvt.   http://llvm.org/bugs/show_bug.cgi?id=13602  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162585  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-24 20:37:00 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						e7d59f2601 
					 
					
						
						
							
							Fixed order of calling use_facet vs setbuf in basic_filebuf default constructor.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162571  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-24 18:06:47 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						8540d4c9d2 
					 
					
						
						
							
							basic_filebuf needs to delay obtaining a codecvt facet from the global locale to give the client a chance to imbue the proper locale.  Fixes  http://llvm.org/bugs/show_bug.cgi?id=13663 .  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162567  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-24 16:52:47 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						ffab05833f 
					 
					
						
						
							
							In C++03 mode add an explicit conversion from int to the emulated class enum.  Fixes a problem reported by C. Bergström.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162189  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-19 17:14:47 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						96c60b482e 
					 
					
						
						
							
							Patch contributed by Dev Dude for mingw64 port.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162188  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-19 15:13:16 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						a0852ffbe8 
					 
					
						
						
							
							Apply patches supplied by Michel Morin in  http://llvm.org/bugs/show_bug.cgi?id=13601  to correct bugs in is_convertible for the case that the intrinsic __is_convertible_to is not available.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162111  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-17 17:54:11 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						4ae952ab9a 
					 
					
						
						
							
							Consistently label __bit_array as a struct, not a class.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162108  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-17 17:10:18 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						e87514aa94 
					 
					
						
						
							
							Patch constributed by Michel Moren in  http://llvm.org/bugs/show_bug.cgi?id=13592  .  Fixes is_convertible<From, To> when To is an abstract type.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@161755  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-13 12:29:17 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						584db4287b 
					 
					
						
						
							
							std::equal operating on non-const __bit_iterators was not working.  This fixes it.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@161309  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-05 21:43:11 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						4b2f4203a2 
					 
					
						
						
							
							Performance tweaking rotate.  
						
						 
						
						... 
						
						
						
						rotate is a critical algorithm because it is often used by other algorithms,
both std and non-std.  The main thrust of this optimization is a specialized
algorithm when the 'distance' to be shifted is 1 (either left or right).  To my
surprise, this 'optimization' was not effective for types like std::string.
std::string favors rotate algorithms which only use swap.  But for types like
scalars, and especially when the sequence is random access, these new
specializations are a big win.  If it is a vector<size_t> for example, the
rotate is done via a memmove and can be several times faster than the gcd
algorithm.
I'm using is_trivially_move_assignable to distinguish between types like int and
types like string.  This is obviously an ad-hoc approximation, but I haven't
found a case where it doesn't give good results.
I've used a 'static if' (with is_trivially_move_assignable) in three places. 
Testing with both -Os and -O3 showed that clang eliminated all code not be
executed by the 'static if' (including the 'static if' itself).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@161247  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-03 18:01:20 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						5fec82dc0d 
					 
					
						
						
							
							Implement [util.smartptr.shared.atomic].  This is the last unimplemented  
						
						 
						
						... 
						
						
						
						section in libc++.  This requires a recompiled dylib.  Failure to rebuild
the dylib will result in a link-time error if and only if the functions from
[util.smartptr.shared.atomic] are used.
The implementation is not lock free.  After considerable thought, I know of no
way to make the implementation lock free.  Ideas welcome along that front.  But
changing the ABI of shared_ptr is not on the table at this point.
The mutex used to lock these function is encapsulated by std::__sp_mut.  The
only thing the client knows about std::__sp_mut is that it has a void* data
member, can't be constructed, and has lock and unlock members.  Within the
binary __sp_mut is currently implemented as a pointer to a std::mutex.  That can
change in the future without disturbing the ABI (as long as sizeof(__sp_mut)
remains constant.
I specifically did not make __sp_mut a spin lock as I have a pathological
distrust of spin locks.  Testing on OS X reveals that the use of std::mutex in
this role is not a large performance penalty as long as the contention for the
mutex is low (more likely to get the lock than to have to wait).  In the future
we can still make __sp_mut a spin lock if that is what is desired (without ABI
damage).
The dylib contains 16 __sp_mut's to be chosen based on the hash of the address
of the shared_ptr.  The constant 16 is a ball-park reasonable space/time
tradeoff.
std::hash<T*> was changed to call __murmur2_or_cityhash, instead of the identity
function.  I had thought we had already done this, but I was mistaken.
All of this is under #if __has_feature(cxx_atomic) even though the
implementation is not lock free, because the signatures require access to
std::memory_order, which is currently available only under
__has_feature(cxx_atomic).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160940  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-30 01:40:57 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						afcac1ac46 
					 
					
						
						
							
							Patch by Andrew C. Morrow:  shims to work around macroized getc and putc on linux.  On my eglibc 2.13 based Debian system 'getc' is a macro defined in  
						
						 
						
						... 
						
						
						
						/usr/include/stdio.h. This decision to make it a macro doesn't seem to
be guarded by any feature test macro as far as I can see.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160799  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-26 20:01:13 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						ca8eb830dd 
					 
					
						
						
							
							<algorithm> no longer needs to include <cstdlib>, but can get away with just <cstddef>.  This was brought to my attention by Salvatore Benedetto in his port to a bare-metal coretex-m3.  This exposed two test bugs where an explicit #include <cstdlib> was needed.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160786  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-26 17:09:09 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f3d62ea57f 
					 
					
						
						
							
							locale::id really needs to be constructed at compile time.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160785  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-26 16:14:37 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Richard Smith 
							
						 
					 
					
						
						
							
						
						0405cc4ae0 
					 
					
						
						
							
							libc++: switch from using _ATTRIBUTE(noreturn) (which conflicts with a  
						
						 
						
						... 
						
						
						
						platform-provided macro on some systems) to _LIBCPP_NORETURN.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160773  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-26 02:04:22 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						8131a01a9c 
					 
					
						
						
							
							Apple LWG 2067:  http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3318.html#2067  .  This is the only actionable change that has been made to the C++ draft since C++11.  In general it has not been decided exactly how libc++ will track changes made to C++11.  New features and design changes will probably be #ifdef'd, especially if they are not backwards compatible.  Defects and 'dumb mistakes' are more likely to just be put in.  Decisions on telling one from the other will be made on a case by case basis.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160608  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 19:34:12 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						8bf01ddd30 
					 
					
						
						
							
							noexcept applied to <future>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160607  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 17:46:55 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						6e1d851be8 
					 
					
						
						
							
							noexcept applied to <thread>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160606  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 16:50:47 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						c8f7413908 
					 
					
						
						
							
							noexcept applied to <condition_variable>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160605  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 16:32:53 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						499c61f999 
					 
					
						
						
							
							noexcept and constexpr applied to <mutex>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160604  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 16:13:09 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						46623a09ee 
					 
					
						
						
							
							noexcept and constexpr applied to <regex>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160594  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 01:31:58 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f57bd564fd 
					 
					
						
						
							
							noexcept and constexpr applied to <ios>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160593  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 01:03:40 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						bd143086ac 
					 
					
						
						
							
							noexcept applied to <valarray>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160592  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-21 00:51:28 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						410f2def47 
					 
					
						
						
							
							constexpr applied to <complex>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160585  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 22:18:27 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						c83960a9e4 
					 
					
						
						
							
							noexcept applied to <random>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160579  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 21:44:27 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						d06a640ba7 
					 
					
						
						
							
							noexcept applied to <iterator>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160565  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 19:36:34 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						08bce1754d 
					 
					
						
						
							
							constexpr applied to <array>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160564  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 19:20:49 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						03d7181b0e 
					 
					
						
						
							
							constexpr applied to <string>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160563  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 19:09:12 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						e41f475a44 
					 
					
						
						
							
							Further tweaks on relaxing complete type checking for function.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160562  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-20 18:56:07 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						c425307238 
					 
					
						
						
							
							Relax the complete-type checks that are happening under __invokable<Fp, Args...> to only check Fp, and not Args... .  This should be sufficient to give the desired high quality diagnostics under both bind and function.  And this allows a test reported by Rich E on cfe-dev to pass.  Tracked by <rdar://problem/11880602>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160285  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-16 16:17:34 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						473f838128 
					 
					
						
						
							
							Applied constexpr to <chrono>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160184  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-13 19:17:27 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						1ca23672a0 
					 
					
						
						
							
							Fixed a bug in wstring_convert concerning zero-length inputs.  Thanks to Jonathan Coxhead for reporting this bug.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@160136  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-12 18:07:41 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						a58402abb9 
					 
					
						
						
							
							Change emplace for vector and deque to create the temporary (when necessary) before any changes to the container are made.  Nikolay Ivchenkov deserves the credit for pushing this problem and the solution for it.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159918  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-08 23:23:04 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						46e9493c68 
					 
					
						
						
							
							Appy constexpr to <memory>.  Picked up a few missing noexcepts as well.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159902  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-07 20:56:04 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						384608e90d 
					 
					
						
						
							
							Apply constexpr to the mutex constructor.  As a conforming extension, apply constexpr to the condition_variable constructor.  These are important because it enables the compiler to construct these types at compile time, even though the object will be non-const.  Since they are constructed at compile time, there is no chance of a data race before they are constructed.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159901  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-07 20:01:52 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						90d8723476 
					 
					
						
						
							
							Apply constexpr to <bitset>.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159899  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-07 17:04:52 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						74f26f251b 
					 
					
						
						
							
							Apply noexcept to tuple.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159865  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 21:53:48 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						4eebfc3394 
					 
					
						
						
							
							As a conforming extension give tuple a noexcept default constructor conditionalized on its held types.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159858  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 20:50:27 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						5394c1ed30 
					 
					
						
						
							
							Give tuple a constexpr default constructor.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159857  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 20:39:45 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						9b12f23e30 
					 
					
						
						
							
							Apply noexcept to those functions implemented in <cstdlib> as a conforming extension.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159850  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 19:16:56 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						cac0c46abb 
					 
					
						
						
							
							Apply noexcept to those functions implemented in <cmath> as a conforming extension.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159849  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 19:13:50 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						7a44515588 
					 
					
						
						
							
							This commit establishes a new bucket_count policy in the unordered containers:  The policy now allows a power-of-2 number of buckets to be requested (and that request honored) by the client.  And if the number of buckets is set to a power of 2, then the constraint of the hash to the number of buckets uses & instead of %.  If the client does not specify a number of buckets, then the policy remains unchanged:  a prime number of buckets is selected.  The growth policy is that the number of buckets is roughly doubled when needed.  While growing, either the prime, or the power-of-2 strategy will be preserved.  There is a small run time cost for putting in this switch.  For very cheap hash functions, e.g. identity for int, the cost can be as high as 18%.  However with more typical use cases, e.g. strings, the cost is in the noise level.  I've measured cases with very cheap hash functions (int) that using a power-of-2 number of buckets can make look up about twice as fast.  However I've also noted that a power-of-2 number of buckets is more susceptible to accidental catastrophic collisions.  Though I've also noted that accidental catastrophic collisions are also possible when using a prime number of buckets (but seems far less likely).  In short, this patch adds an extra tuning knob for those clients trying to get the last bit of performance squeezed out of their hash containers.  Casual users of the hash containers will not notice the introduction of this tuning knob.  Those clients who swear by power-of-2 hash containers can now opt-in to that strategy.  Clients who prefer a prime number of buckets can continue as they have.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159836  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-06 17:31:14 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Nuno Lopes 
							
						 
					 
					
						
						
							
						
						518d150040 
					 
					
						
						
							
							mark operator new(std::nothrow) as noalias (aka __attribute__((malloc))  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159359  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-06-28 16:47:34 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						2d62229b96 
					 
					
						
						
							
							Fixed a bug regarding result_of reported by Sven Behne.  The fix is C++11 only mainly because result_of is a variadic beast and working with variadics is just such a problem in C++03 mode.  This should bring result_of up to full conformance with the C++11 spec.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159211  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-06-26 17:37:15 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						fe59276f04 
					 
					
						
						
							
							Revert pair constructors back to using is_convertible instead of is_constructible.  This should pull things into alignment with the final draft.  Fixes  http://llvm.org/bugs/show_bug.cgi?id=13063#add_comment .  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@158280  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-06-09 20:01:23 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						dbd9eacde0 
					 
					
						
						
							
							Fix dangling else clause.  Bug found and fixed by Dimitry Andric.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157779  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-05-31 23:12:03 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						6467aeb7c9 
					 
					
						
						
							
							Fix the new _ALIGNAS_TYPE per instructions supplied by Eli Friedman.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157765  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-05-31 20:14:00 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						cbdd0896d3 
					 
					
						
						
							
							Protect use of alignas against older versions of clang  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157764  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-05-31 19:31:14 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						635ce1d127 
					 
					
						
						
							
							The rules for emplace in map, multimap, unordered_map and unordered_multimap changed a while back and I'm just now updating to these new rules.  In a nutshell, you've got to know you're emplacing to a pair and use one of pair's constructors.  I made one extension:  If you want to emplace the key and default construct the mapped_type, you can just emplace(key), as opposed to emplace(piecewise_construct, forward_as_tuple(key), forward_as_tuple()).  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157503  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-05-25 22:04:21 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						3e3e5ebc72 
					 
					
						
						
							
							Fix memory corruption bug found and fixed by Andrew C. Morrow.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@157476  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-05-25 15:55:46 +00:00