Skip to content
This repository has been archived by the owner on Oct 16, 2021. It is now read-only.

Commit

Permalink
deps: define missing operator delete functions
Browse files Browse the repository at this point in the history
Section 3.2 of the C++ standard states that destructor definitions
implicitly "use" operator delete functions. Therefore, these operator
delete functions must be defined even if they are never called by
user code explicitly.
http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#261

gcc allows them to remain as empty definitions. However, not all
compilers allow this.

This pull request creates definitions which if ever called, result
in an abort.

PR-URL: nodejs/node#10356
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rod Vagg <rod@vagg.org>
  • Loading branch information
jBarz committed Dec 22, 2016
1 parent decde92 commit b1b5408
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
25 changes: 25 additions & 0 deletions deps/v8/src/api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,11 @@ HandleScope::~HandleScope() {
}


void HandleScope::operator delete(void*, size_t) {
base::OS::Abort();
}


int HandleScope::NumberOfHandles(Isolate* isolate) {
return i::HandleScope::NumberOfHandles(
reinterpret_cast<i::Isolate*>(isolate));
Expand All @@ -623,6 +628,11 @@ EscapableHandleScope::EscapableHandleScope(Isolate* v8_isolate) {
}


void EscapableHandleScope::operator delete(void*, size_t) {
base::OS::Abort();
}


i::Object** EscapableHandleScope::Escape(i::Object** escape_value) {
i::Heap* heap = reinterpret_cast<i::Isolate*>(GetIsolate())->heap();
Utils::ApiCheck(*escape_slot_ == heap->the_hole_value(),
Expand Down Expand Up @@ -658,6 +668,11 @@ SealHandleScope::~SealHandleScope() {
}


void SealHandleScope::operator delete(void*, size_t) {
base::OS::Abort();
}


void Context::Enter() {
i::Handle<i::Context> env = Utils::OpenHandle(this);
i::Isolate* isolate = env->GetIsolate();
Expand Down Expand Up @@ -1884,6 +1899,11 @@ v8::TryCatch::~TryCatch() {
}


void v8::TryCatch::operator delete(void*, size_t) {
base::OS::Abort();
}


bool v8::TryCatch::HasCaught() const {
return !reinterpret_cast<i::Object*>(exception_)->IsTheHole();
}
Expand Down Expand Up @@ -6449,6 +6469,11 @@ void Isolate::RemoveGCEpilogueCallback(GCEpilogueCallback callback) {
}


void Isolate::operator delete(void*, size_t) {
base::OS::Abort();
}


void V8::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) {
i::Isolate* isolate = i::Isolate::Current();
isolate->heap()->AddGCPrologueCallback(
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/version.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 28
#define BUILD_NUMBER 71
#define PATCH_LEVEL 19
#define PATCH_LEVEL 20
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0
Expand Down

0 comments on commit b1b5408

Please sign in to comment.