Blame gc_cpp.cc

Packit d28291
/*
Packit d28291
 * Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
Packit d28291
 *
Packit d28291
 * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
Packit d28291
 * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
Packit d28291
 *
Packit d28291
 * Permission is hereby granted to copy this code for any purpose,
Packit d28291
 * provided the above notices are retained on all copies.
Packit d28291
 */
Packit d28291
Packit d28291
/*************************************************************************
Packit d28291
This implementation module for gc_c++.h provides an implementation of
Packit d28291
the global operators "new" and "delete" that calls the Boehm
Packit d28291
allocator.  All objects allocated by this implementation will be
Packit d28291
uncollectible but part of the root set of the collector.
Packit d28291
Packit d28291
You should ensure (using implementation-dependent techniques) that the
Packit d28291
linker finds this module before the library that defines the default
Packit d28291
built-in "new" and "delete".
Packit d28291
**************************************************************************/
Packit d28291
Packit d28291
#ifdef HAVE_CONFIG_H
Packit d28291
# include "config.h"
Packit d28291
#endif
Packit d28291
Packit d28291
#ifndef GC_BUILD
Packit d28291
# define GC_BUILD
Packit d28291
#endif
Packit d28291
Packit d28291
#include "gc_cpp.h"
Packit d28291
Packit d28291
#if !defined(GC_NEW_DELETE_NEED_THROW) && defined(__GNUC__) \
Packit d28291
    && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
Packit d28291
# define GC_NEW_DELETE_NEED_THROW
Packit d28291
#endif
Packit d28291
Packit d28291
#ifdef GC_NEW_DELETE_NEED_THROW
Packit d28291
# include <new> /* for std::bad_alloc */
Packit d28291
# define GC_DECL_NEW_THROW throw(std::bad_alloc)
Packit d28291
# define GC_DECL_DELETE_THROW throw()
Packit d28291
#else
Packit d28291
# define GC_DECL_NEW_THROW /* empty */
Packit d28291
# define GC_DECL_DELETE_THROW /* empty */
Packit d28291
#endif // !GC_NEW_DELETE_NEED_THROW
Packit d28291
Packit d28291
#ifndef _MSC_VER
Packit d28291
Packit d28291
  void* operator new(size_t size) GC_DECL_NEW_THROW {
Packit d28291
    return GC_MALLOC_UNCOLLECTABLE(size);
Packit d28291
  }
Packit d28291
Packit d28291
  void operator delete(void* obj) GC_DECL_DELETE_THROW {
Packit d28291
    GC_FREE(obj);
Packit d28291
  }
Packit d28291
Packit d28291
# if defined(GC_OPERATOR_NEW_ARRAY) && !defined(CPPCHECK)
Packit d28291
    void* operator new[](size_t size) GC_DECL_NEW_THROW {
Packit d28291
      return GC_MALLOC_UNCOLLECTABLE(size);
Packit d28291
    }
Packit d28291
Packit d28291
    void operator delete[](void* obj) GC_DECL_DELETE_THROW {
Packit d28291
      GC_FREE(obj);
Packit d28291
    }
Packit d28291
# endif // GC_OPERATOR_NEW_ARRAY
Packit d28291
Packit d28291
# if __cplusplus > 201103L // C++14
Packit d28291
    void operator delete(void* obj, size_t size) GC_DECL_DELETE_THROW {
Packit d28291
      (void)size; // size is ignored
Packit d28291
      GC_FREE(obj);
Packit d28291
    }
Packit d28291
Packit d28291
#   if defined(GC_OPERATOR_NEW_ARRAY) && !defined(CPPCHECK)
Packit d28291
      void operator delete[](void* obj, size_t size) GC_DECL_DELETE_THROW {
Packit d28291
        (void)size;
Packit d28291
        GC_FREE(obj);
Packit d28291
      }
Packit d28291
#   endif
Packit d28291
# endif // C++14
Packit d28291
Packit d28291
#endif // !_MSC_VER