--- old/src/share/vm/gc/g1/g1ConcurrentMark.cpp 2017-03-08 10:51:31.253191120 +0100 +++ new/src/share/vm/gc/g1/g1ConcurrentMark.cpp 2017-03-08 10:51:31.139187743 +0100 @@ -2408,11 +2408,11 @@ size_t n = 0; G1TaskQueueEntry task_entry; while (n < G1CMMarkStack::EntriesPerChunk && _task_queue->pop_local(task_entry)) { - buffer[n] = task_entry; + buffer[n].assign(task_entry); ++n; } if (n < G1CMMarkStack::EntriesPerChunk) { - buffer[n] = G1TaskQueueEntry(); + buffer[n].assign(G1TaskQueueEntry()); } if (n > 0) { --- old/src/share/vm/gc/g1/g1ConcurrentMark.hpp 2017-03-08 10:51:31.651202910 +0100 +++ new/src/share/vm/gc/g1/g1ConcurrentMark.hpp 2017-03-08 10:51:31.533199414 +0100 @@ -39,12 +39,6 @@ class G1OldTracer; class G1SurvivorRegions; -#ifdef _MSC_VER -#pragma warning(push) -// warning C4522: multiple assignment operators specified -#pragma warning(disable:4522) -#endif - // This is a container class for either an oop or a continuation address for // mark stack entries. Both are pushed onto the mark stack. class G1TaskQueueEntry VALUE_OBJ_CLASS_SPEC { @@ -64,9 +58,8 @@ static G1TaskQueueEntry from_slice(HeapWord* what) { return G1TaskQueueEntry(what); } static G1TaskQueueEntry from_oop(oop obj) { return G1TaskQueueEntry(obj); } - G1TaskQueueEntry& operator=(const G1TaskQueueEntry& t) { + void assign(const G1TaskQueueEntry& t) { _holder = t._holder; - return *this; } volatile G1TaskQueueEntry& operator=(const volatile G1TaskQueueEntry& t) volatile { @@ -89,10 +82,6 @@ bool is_null() const { return _holder == NULL; } }; -#ifdef _MSC_VER -#pragma warning(pop) -#endif - typedef GenericTaskQueue G1CMTaskQueue; typedef GenericTaskQueueSet G1CMTaskQueueSet;