mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			Prevent internal aligned_alloc clashing with libc version
If configure fails to detect aligned_alloc we will try to define our own in new_opa.cc but that could clash with the libcversion in <stdlib.h>. Use a namespace to keep them distinct. * libsupc++/new_opa.cc (aligned_alloc): Declare inside namespace to avoid clashing with an ::aligned_alloc function that was not detected by configure. From-SVN: r263409
This commit is contained in:
		
							parent
							
								
									8e09a12f01
								
							
						
					
					
						commit
						a801991954
					
				|  | @ -1,5 +1,9 @@ | |||
| 2018-08-08  Jonathan Wakely  <jwakely@redhat.com> | ||||
| 
 | ||||
| 	* libsupc++/new_opa.cc (aligned_alloc): Declare inside namespace to | ||||
| 	avoid clashing with an ::aligned_alloc function that was not detected | ||||
| 	by configure. | ||||
| 
 | ||||
| 	* doc/xml/manual/using.xml: Fix markup for empty table entry. | ||||
| 	* doc/html/*: Regenerate. | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,15 +25,30 @@ | |||
| 
 | ||||
| #include <bits/c++config.h> | ||||
| #include <stdlib.h> | ||||
| #include <stdint.h> | ||||
| #include <bits/exception_defines.h> | ||||
| #include "new" | ||||
| 
 | ||||
| #if !_GLIBCXX_HAVE_ALIGNED_ALLOC && !_GLIBCXX_HAVE__ALIGNED_MALLOC \ | ||||
|   && !_GLIBCXX_HAVE_POSIX_MEMALIGN && _GLIBCXX_HAVE_MEMALIGN | ||||
| # if _GLIBCXX_HOSTED && __has_include(<malloc.h>) | ||||
| // Some C libraries declare memalign in <malloc.h>
 | ||||
| #  include <malloc.h> | ||||
| # else | ||||
| extern "C" void *memalign(std::size_t boundary, std::size_t size); | ||||
| # endif | ||||
| #endif | ||||
| 
 | ||||
| using std::new_handler; | ||||
| using std::bad_alloc; | ||||
| 
 | ||||
| #if !_GLIBCXX_HAVE_ALIGNED_ALLOC | ||||
| #if _GLIBCXX_HAVE__ALIGNED_MALLOC | ||||
| #define aligned_alloc(al,sz) _aligned_malloc(sz,al) | ||||
| namespace __gnu_cxx { | ||||
| #if _GLIBCXX_HAVE_ALIGNED_ALLOC | ||||
| using ::aligned_alloc; | ||||
| #elif _GLIBCXX_HAVE__ALIGNED_MALLOC | ||||
| static inline void* | ||||
| aligned_alloc (std::size_t al, std::size_t sz) | ||||
| { return _aligned_malloc(sz, al); } | ||||
| #elif _GLIBCXX_HAVE_POSIX_MEMALIGN | ||||
| static inline void* | ||||
| aligned_alloc (std::size_t al, std::size_t sz) | ||||
|  | @ -49,11 +64,6 @@ aligned_alloc (std::size_t al, std::size_t sz) | |||
|   return nullptr; | ||||
| } | ||||
| #elif _GLIBCXX_HAVE_MEMALIGN | ||||
| #if _GLIBCXX_HOSTED | ||||
| #include <malloc.h> | ||||
| #else | ||||
| extern "C" void *memalign(std::size_t boundary, std::size_t size); | ||||
| #endif | ||||
| static inline void* | ||||
| aligned_alloc (std::size_t al, std::size_t sz) | ||||
| { | ||||
|  | @ -66,7 +76,6 @@ aligned_alloc (std::size_t al, std::size_t sz) | |||
|   return memalign (al, sz); | ||||
| } | ||||
| #else // !HAVE__ALIGNED_MALLOC && !HAVE_POSIX_MEMALIGN && !HAVE_MEMALIGN
 | ||||
| #include <stdint.h> | ||||
| // The C library doesn't provide any aligned allocation functions, define one.
 | ||||
| // This is a modified version of code from gcc/config/i386/gmm_malloc.h
 | ||||
| static inline void* | ||||
|  | @ -87,7 +96,7 @@ aligned_alloc (std::size_t al, std::size_t sz) | |||
|   return aligned_ptr; | ||||
| } | ||||
| #endif | ||||
| #endif | ||||
| } // namespace __gnu_cxx
 | ||||
| 
 | ||||
| _GLIBCXX_WEAK_DEFINITION void * | ||||
| operator new (std::size_t sz, std::align_val_t al) | ||||
|  | @ -116,6 +125,7 @@ operator new (std::size_t sz, std::align_val_t al) | |||
|     sz += align - rem; | ||||
| #endif | ||||
| 
 | ||||
|   using __gnu_cxx::aligned_alloc; | ||||
|   while (__builtin_expect ((p = aligned_alloc (align, sz)) == 0, false)) | ||||
|     { | ||||
|       new_handler handler = std::get_new_handler (); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jonathan Wakely
						Jonathan Wakely