https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68073

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |trippels at gcc dot gnu.org
         Resolution|---                         |INVALID

--- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
This is due to the new small string optimization in libstdc++.
It doesn't use the heap anymore for this case.

Your code calls the string destructor directly:

202 template<typename T, typename... Types>                                     
203 struct variant_helper<T, Types...>                                          
204 {                                                                           
205     VARIANT_INLINE static void destroy(const std::size_t id, void * data)   
206     {                                                                       
207         if (id == sizeof...(Types))                                         
208         {                                                                   
209             reinterpret_cast<T*>(data)->~T();                               
210         } 

#1 0x401a5c in mapnik::util::variant_helper<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, bool>::destroy(unsigned long,
void*) mapnik/include/mapnik/util/variant.hpp:209

So it will try to free an address that was never allocated.

Reply via email to