]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/libsupc++/new_opnt.cc
Update copyright years in libstdc++-v3/
[thirdparty/gcc.git] / libstdc++-v3 / libsupc++ / new_opnt.cc
CommitLineData
06bd10fb 1// Support routines for the -*- C++ -*- dynamic memory management.
aa118a03 2// Copyright (C) 1997-2014 Free Software Foundation, Inc.
06bd10fb 3//
cbecceb9 4// This file is part of GCC.
06bd10fb 5//
cbecceb9 6// GCC is free software; you can redistribute it and/or modify
06bd10fb 7// it under the terms of the GNU General Public License as published by
748086b7 8// the Free Software Foundation; either version 3, or (at your option)
06bd10fb
BK
9// any later version.
10//
cbecceb9 11// GCC is distributed in the hope that it will be useful,
06bd10fb
BK
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15//
748086b7
JJ
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23// <http://www.gnu.org/licenses/>.
06bd10fb 24
34a133a8 25#include <bits/c++config.h>
7c3e9502 26#include <bits/exception_defines.h>
b967bf25 27#include "new"
e2c09482 28
06bd10fb
BK
29using std::new_handler;
30using std::bad_alloc;
31
6b76f569 32extern "C" void *malloc (std::size_t);
06bd10fb 33
5cc78150 34_GLIBCXX_WEAK_DEFINITION void *
578f0234 35operator new (std::size_t sz, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
06bd10fb
BK
36{
37 void *p;
38
39 /* malloc (0) is unpredictable; avoid it. */
40 if (sz == 0)
41 sz = 1;
42 p = (void *) malloc (sz);
43 while (p == 0)
44 {
dca77a8a 45 new_handler handler = std::get_new_handler ();
06bd10fb
BK
46 if (! handler)
47 return 0;
bbcfe54a 48 __try
06bd10fb
BK
49 {
50 handler ();
51 }
bbcfe54a 52 __catch(const bad_alloc&)
06bd10fb
BK
53 {
54 return 0;
55 }
56
57 p = (void *) malloc (sz);
58 }
59
60 return p;
61}