Eric Fiselier 
							
						 
					 
					
						
						
							
						
						00f4a49b0b 
					 
					
						
						
							
							[libcxx] Allow use of <atomic> in C++03. Try 3.  
						
						 
						
						... 
						
						
						
						Summary:
After putting this question up on cfe-dev I have decided that it would be best to allow the use of `<atomic>` in C++03. Although static initialization is a concern the syntax required to get it is C++11 only. Meaning that C++11 constant static initialization cannot silently break in C++03, it will always cause a syntax error. Furthermore `ATOMIC_VAR_INIT` and `ATOMIC_FLAG_INIT` remain defined in C++03 even though they cannot be used because C++03 usages will cause better error messages.
The main change in this patch is to replace `__has_feature(cxx_atomic)`, which only returns true when C++ >= 11, to `__has_extension(c_atomic)` which returns true whenever clang supports the required atomic builtins.
This patch adds the following macros:
* `_LIBCPP_HAS_C_ATOMIC_IMP`      - Defined on clang versions which provide the C `_Atomic` keyword.
* `_LIBCPP_HAS_GCC_ATOMIC_IMP` - Defined on GCC > 4.7. We must use the fallback atomic implementation.
* `_LIBCPP_HAS_NO_ATOMIC_HEADER` - Defined when it is not safe to include `<atomic>`.
`_LIBCPP_HAS_C_ATOMIC_IMP` and `_LIBCPP_HAS_GCC_ATOMIC_IMP` are mutually exclusive, only one should be defined. If neither is defined then `<atomic>` is not implemented and including `<atomic>` will issue an error.
Reviewers: chandlerc, jroelofs, mclow.lists
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D11555 
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@245463  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2015-08-19 17:21:46 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Jonathan Roelofs 
							
						 
					 
					
						
						
							
						
						baed05dd37 
					 
					
						
						
							
							Address some post-commit review comments on r217261  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@217276  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2014-09-05 20:28:44 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Jonathan Roelofs 
							
						 
					 
					
						
						
							
						
						8d86b2e686 
					 
					
						
						
							
							Allow libc++ to be built on systems without POSIX threads  
						
						 
						
						... 
						
						
						
						If you're crazy enough to want this sort of thing, then add
-D_LIBCPP_HAS_NO_THREADS to your CXXFLAGS and
--param=additiona_features=libcpp-has-no-threads to your lit commnad line.
http://reviews.llvm.org/D3969 
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@217271  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2014-09-05 19:45:05 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Marshall Clow 
							
						 
					 
					
						
						
							
						
						8a43fca8ed 
					 
					
						
						
							
							Patch by GM: Making implicit conversion to bool explicit in <ios> and <__locale>  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@193085  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-10-21 14:41:05 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Marshall Clow 
							
						 
					 
					
						
						
							
						
						61a8422ffa 
					 
					
						
						
							
							LWG Issue 2087: iostream_category() and noexcept  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@192545  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-10-12 22:49:56 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Marshall Clow 
							
						 
					 
					
						
						
							
						
						206ce1faaf 
					 
					
						
						
							
							LWG issue 2143: ios_base::xalloc should be thread-safe  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@192539  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-10-12 19:13:52 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						e064055942 
					 
					
						
						
							
							G M: Rename local variable from __except to avoid MSVC keyword clash.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@192072  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-10-06 21:00:29 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						0f678bd69e 
					 
					
						
						
							
							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 >.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@188192  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-08-12 18:38:34 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Marshall Clow 
							
						 
					 
					
						
						
							
						
						809e93f7f2 
					 
					
						
						
							
							move __save_flags from <random> to <ios> in preparation for reuse; no functionality change  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@185968  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-07-09 20:34:14 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						83eade6abb 
					 
					
						
						
							
							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.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@176593  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-03-06 23:30:19 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						9c0df1416f 
					 
					
						
						
							
							Rename uses of _ and __ because these are getting stepped on by macros from other system code.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@167038  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-10-30 19:06:59 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						33be35effe 
					 
					
						
						
							
							Dimitry Andric:  many visibility fixes.  Howard:  Much appreciated.  Can you send me a patch to CREDITS.TXT?  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@163862  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-09-14 00:39:16 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						c417a802ed 
					 
					
						
						
							
							Hyeon-bin Jeong:  libc++ fails to create any classes inherit from basic_ios if they  
						
						 
						
						... 
						
						
						
						provided char type other than char or wchar_t. It throw exception during
construction, so there is no chance to imbue own ctype.
This fixes http://llvm.org/bugs/show_bug.cgi?id=13698 
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@162648  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-26 18:05:35 +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 
							
						 
					 
					
						
						
							
						
						7786188d15 
					 
					
						
						
							
							Modernize conversion to bool to the explicit bool conversion operator (library wide).  This fixes  http://llvm.org/bugs/show_bug.cgi?id=12058 .  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@151088  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-02-21 21:46:43 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f6d875f7f5 
					 
					
						
						
							
							Fix  http://llvm.org/bugs/show_bug.cgi?id=11428 .  Fix provided by Alberto Ganesh Barbati  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@145698  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-12-02 19:36:40 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						08e17472e4 
					 
					
						
						
							
							Windows support by Ruben Van Boxem.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@142235  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-10-17 20:05:10 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						0949eedbd6 
					 
					
						
						
							
							_STD -> _VSTD to avoid macro clash on windows  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@134190  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-06-30 21:18:19 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						2d72b1e393 
					 
					
						
						
							
							Effort to reduce the number of exported symbols  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@122057  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-12-17 14:46:43 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						b64f8b07c1 
					 
					
						
						
							
							license change  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119395  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-11-16 22:09:02 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						68a8e90b3d 
					 
					
						
						
							
							visibility-decoration.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@114545  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-09-22 15:29:08 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						73d21a4f07 
					 
					
						
						
							
							Changed __config to react to all of clang's currently documented has_feature flags, and renamed _LIBCPP_MOVE to _LIBCPP_HAS_NO_RVALUE_REFERENCES to be more consistent with the rest of the libc++'s flags, and with clang's nomenclature.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@113086  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-09-04 23:28:19 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						324bb03bb9 
					 
					
						
						
							
							Fixing whitespace problems  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111750  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-08-22 00:02:43 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f5256e16df 
					 
					
						
						
							
							Wiped out some non-ascii characters that snuck into the copyright.  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103516  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-11 21:36:01 +00:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						bc8d3f97eb 
					 
					
						
						
							
							libcxx initial import  
						
						 
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-11 19:42:16 +00:00