From 944746d5d04ea8eaf268a97440c98136beae1e47 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 11 Jul 2017 10:15:41 +0200 Subject: [PATCH] chromium: v8 fix build with gcc7 Use the fix from nodejs: https://github.com/nodejs/node/commit/2a2a5565c298639b823250b571101f51210c50e8 * fixes: | ../../git/src/v8/src/objects-body-descriptors.h: In static member function 'static void v8::internal::FixedBodyDescriptor::IterateBody(v8::internal::HeapObject*, int)': | ../../git/src/v8/src/objects-body-descriptors.h:102:20: error: no matching function for call to 'v8::internal::FixedBodyDescriptor::IterateBody(v8::internal::HeapObject*&)' | IterateBody(obj); | ^ and | ../../v8/src/objects.h: In member function 'uint32_t v8::internal::HashTable::Hash(Key)': | ../../v8/src/objects.h:3205:46: error: invalid use of incomplete type 'class v8::internal::Heap' [-Werror] | return Shape::SeededHash(key, GetHeap()->HashSeed()); | ^~ and ../../v8/src/heap/mark-compact.cc:3660:43: error: 'v8::internal::PointerUpdateJobTraits::UpdateTypedPointers(v8::internal::Heap*, v8::internal::MemoryChunk*):: [with v8::internal::PointerDirection direction = (v8::internal::PointerDirection)1; v8::internal::Address = unsigned char*; v8::internal::byte = unsigned char]::' declared with greater visibility than the type of its field 'v8::internal::PointerUpdateJobTraits::UpdateTypedPointers(v8::internal::Heap*, v8::internal::MemoryChunk*):: [with v8::internal::PointerDirection direction = (v8::internal::PointerDirection)1; v8::internal::Address = unsigned char*; v8::internal::byte = unsigned char]::::' [-Werror=attributes] Signed-off-by: Martin Jansa --- chromium/v8/src/heap/mark-compact.cc | 5 +++++ chromium/v8/src/objects-body-descriptors.h | 2 +- chromium/v8/src/objects-inl.h | 20 ++++++++++++++++++++ chromium/v8/src/objects.h | 20 ++++---------------- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/chromium/v8/src/heap/mark-compact.cc b/chromium/v8/src/heap/mark-compact.cc index f9a55dfc61..da46270aec 100644 --- a/chromium/v8/src/heap/mark-compact.cc +++ b/chromium/v8/src/heap/mark-compact.cc @@ -3614,6 +3614,9 @@ void MarkCompactCollector::EvacuateNewSpaceAndCandidates() { #endif } +#pragma GCC diagnostic push +#pragma GCC diagnostic warning "-Wattributes" + template class PointerUpdateJobTraits { public: @@ -3701,6 +3704,8 @@ class PointerUpdateJobTraits { } }; +#pragma GCC diagnostic pop + int NumberOfPointerUpdateTasks(int pages) { if (!FLAG_parallel_pointer_update) return 1; const int kMaxTasks = 4; diff --git a/chromium/v8/src/objects-body-descriptors.h b/chromium/v8/src/objects-body-descriptors.h index 91cb8883be..a1c3634bd7 100644 --- a/chromium/v8/src/objects-body-descriptors.h +++ b/chromium/v8/src/objects-body-descriptors.h @@ -99,7 +99,7 @@ class FixedBodyDescriptor final : public BodyDescriptorBase { template static inline void IterateBody(HeapObject* obj, int object_size) { - IterateBody(obj); + IterateBody(obj); } }; diff --git a/chromium/v8/src/objects-inl.h b/chromium/v8/src/objects-inl.h index 58441d3853..e850fd787f 100644 --- a/chromium/v8/src/objects-inl.h +++ b/chromium/v8/src/objects-inl.h @@ -38,6 +38,26 @@ namespace v8 { namespace internal { +template +uint32_t HashTable::Hash(Key key) { + if (Shape::UsesSeed) { + return Shape::SeededHash(key, GetHeap()->HashSeed()); + } else { + return Shape::Hash(key); + } +} + + +template +uint32_t HashTable::HashForObject(Key key, + Object* object) { + if (Shape::UsesSeed) { + return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object); + } else { + return Shape::HashForObject(key, object); + } +} + PropertyDetails::PropertyDetails(Smi* smi) { value_ = smi->value(); } diff --git a/chromium/v8/src/objects.h b/chromium/v8/src/objects.h index 7d774beb5b..eda1478766 100644 --- a/chromium/v8/src/objects.h +++ b/chromium/v8/src/objects.h @@ -3193,22 +3193,10 @@ class HashTable : public HashTableBase { public: typedef Shape ShapeT; - // Wrapper methods - inline uint32_t Hash(Key key) { - if (Shape::UsesSeed) { - return Shape::SeededHash(key, GetHeap()->HashSeed()); - } else { - return Shape::Hash(key); - } - } - - inline uint32_t HashForObject(Key key, Object* object) { - if (Shape::UsesSeed) { - return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object); - } else { - return Shape::HashForObject(key, object); - } - } + // Wrapper methods. Defined in src/objects-inl.h + // to break a cycle with src/heap/heap.h. + inline uint32_t Hash(Key key); + inline uint32_t HashForObject(Key key, Object* object); // Returns a new HashTable object. MUST_USE_RESULT static Handle New(