text: /* cxx.cc
  
  This file is part of Cygwin.
  
  This software is a copyrighted work licensed under the terms of the
  Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
  details. */
  
  #if (__GNUC__ >= 3)
  
  #include "winsup.h"
  #include "cygwin-cxx.h"
  
  /* These implementations of operators new and delete are used internally by
     the DLL, and are kept separate from the user's/libstdc++'s versions by
     use of LD's --wrap option.  */
  
  void *
  operator new (std::size_t s)
  {
    void *p = calloc (1, s);
    return p;
  }
  
  void
  operator delete (void *p)
  {
    free (p);
  }
  
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wc++14-compat"
  void
  operator delete (void *p, size_t)
  {
    ::operator delete(p);
  }
  #pragma GCC diagnostic pop
  
  void *
  operator new[] (std::size_t s)
  {
    return ::operator new (s);
  }
  
  void
  operator delete[] (void *p)
  {
    ::operator delete (p);
  }
  
  /* Nothrow versions, provided only for completeness in the fallback array.  */
  
  void *
  operator new (std::size_t s, const std::nothrow_t &)
  {
    void *p = calloc (1, s);
    return p;
  }
  
  void
  operator delete (void *p, const std::nothrow_t &)
  {
    free (p);
  }
  
  void *
  operator new[] (std::size_t s, const std::nothrow_t &nt)
  {
    return ::operator new (s, nt);
  }
  
  void
  operator delete[] (void *p, const std::nothrow_t &nt)
  {
    ::operator delete (p, nt);
  }
  
  
  extern "C" void
  __cxa_pure_virtual (void)
  {
    api_fatal ("pure virtual method called");
  }
  
  extern "C" void
  __cxa_guard_acquire ()
  {
  }
  
  extern "C" void
  __cxa_guard_release ()
  {
  }
  
  /* These routines are made available as last-resort fallbacks
     for the application.  Should not be used in practice; the
     entries in this struct get overwritten by each DLL as it
     is loaded, and libstdc++ will override the whole lot first
     thing of all.   */
  
  struct per_process_cxx_malloc default_cygwin_cxx_malloc =
  {
    &(operator new),
    &(operator new[]),
    &(operator delete),
    &(operator delete[]),
    &(operator new),
    &(operator new[]),
    &(operator delete),
    &(operator delete[]),
  };
  
  
  #endif
  