RFR: 8309044: Replace NULL with nullptr, final sweep of hotspot code
Johan Sjölen
jsjolen at openjdk.org
Mon May 29 11:02:40 UTC 2023
On Mon, 29 May 2023 10:09:15 GMT, Johan Sjölen <jsjolen at openjdk.org> wrote:
> A final sweep of Hotspot to remove all re-added NULLs. With only 110 changes I'd appreciate if this was considered trivial.
All of the stuff to actually keep.
src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp line 125:
> 123:
> 124: void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &cbuf, methodHandle& method, jint pc_offset, JVMCI_TRAPS) {
> 125: NativeCall* call = nullptr;
T
src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp line 158:
> 156: // Check for proper post_call_nop
> 157: NativePostCallNop* nop = nativePostCallNop_at(call->next_instruction_address());
> 158: if (nop == nullptr) {
T
src/hotspot/cpu/ppc/templateTable_ppc_64.cpp line 2297:
> 2295: __ ld_ptr(method, array_base_offset + in_bytes(ResolvedIndyEntry::method_offset()), cache);
> 2296:
> 2297: // The invokedynamic is unresolved iff method is null
T
src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp line 374:
> 372: // Make sure klass is 'reasonable', which is not zero.
> 373: __ load_klass(obj, obj, tmp1); // get klass
> 374: __ beqz(obj, error); // if klass is null it is broken
T
src/hotspot/cpu/riscv/stubGenerator_riscv.cpp line 4019:
> 4017: StubRoutines::_forward_exception_entry = generate_forward_exception();
> 4018:
> 4019: if (UnsafeCopyMemory::_table == nullptr) {
T
src/hotspot/cpu/riscv/stubGenerator_riscv.cpp line 4077:
> 4075:
> 4076: BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod();
> 4077: if (bs_nm != nullptr) {
T
src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp line 489:
> 487: __ load_klass(obj, obj, tmp1); // get klass
> 488: __ testptr(obj, obj);
> 489: __ jcc(Assembler::zero, error); // if klass is null it is broken
T
src/hotspot/cpu/x86/interp_masm_x86.cpp line 303:
> 301: jcc(Assembler::equal, L);
> 302: stop("InterpreterMacroAssembler::call_VM_base:"
> 303: " last_sp != null");
T
src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp line 191:
> 189: // Check for proper post_call_nop
> 190: NativePostCallNop* nop = nativePostCallNop_at(call->next_instruction_address());
> 191: if (nop == nullptr) {
T
src/hotspot/share/adlc/output_c.cpp line 279:
> 277: int max_stage = 0;
> 278: i = 0;
> 279: for (pipeline->_reslist.reset(); (resource = pipeline->_reslist.iter()) != nullptr;) {
T
src/hotspot/share/adlc/output_c.cpp line 305:
> 303: templen = 0;
> 304: i = 0;
> 305: for (pipeline->_reslist.reset(); (resource = pipeline->_reslist.iter()) != nullptr;) {
T
src/hotspot/share/adlc/output_c.cpp line 368:
> 366: const char* resource;
> 367: i = 0;
> 368: for (pipeline->_reslist.reset(); (resource = pipeline->_reslist.iter()) != nullptr;) {
T
src/hotspot/share/adlc/output_c.cpp line 393:
> 391:
> 392: i = 0;
> 393: for (pipeline->_reslist.reset(); (resource = pipeline->_reslist.iter()) != nullptr;) {
T
src/hotspot/share/adlc/output_c.cpp line 1009:
> 1007: const char* resource;
> 1008: i = 0;
> 1009: for (_pipeline->_reslist.reset(); (resource = _pipeline->_reslist.iter()) != nullptr;) {
T
src/hotspot/share/cds/filemap.cpp line 363:
> 361:
> 362: void SharedClassPathEntry::copy_from(SharedClassPathEntry* ent, ClassLoaderData* loader_data, TRAPS) {
> 363: assert(ent != nullptr, "sanity");
T
src/hotspot/share/classfile/stringTable.hpp line 150:
> 148: static size_t shared_entry_count() NOT_CDS_JAVA_HEAP_RETURN_(0);
> 149: static void allocate_shared_strings_array(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
> 150: static oop init_shared_table(const DumpedInternedStrings* dumped_interned_strings) NOT_CDS_JAVA_HEAP_RETURN_(nullptr);
T
src/hotspot/share/code/compiledIC.hpp line 93:
> 91: CompiledICHolder* claim_cached_icholder() {
> 92: assert(_is_icholder, "");
> 93: assert(_cached_value != nullptr, "must be non-null");
T
src/hotspot/share/code/compiledIC.hpp line 342:
> 340: // Code
> 341:
> 342: // Returns null if CodeBuffer::expand fails
T
src/hotspot/share/compiler/compileBroker.cpp line 388:
> 386:
> 387: MonitorLocker locker(MethodCompileQueue_lock);
> 388: // If _first is null we have no more compile jobs. There are two reasons for
T
src/hotspot/share/gc/x/xBarrier.cpp line 242:
> 240: oop XBarrier::weak_load_barrier_on_oop_field_preloaded(volatile narrowOop* p, oop o) {
> 241: ShouldNotReachHere();
> 242: return nullptr;
T
src/hotspot/share/gc/x/xBarrierSet.inline.hpp line 187:
> 185: // No check cast, bulk barrier and bulk copy
> 186: XBarrier::load_barrier_on_oop_array(src, length);
> 187: return Raw::oop_arraycopy_in_heap(nullptr, 0, src, nullptr, 0, dst, length);
T
src/hotspot/share/gc/x/xPageTable.inline.hpp line 43:
> 41: inline bool XPageTableIterator::next(XPage** page) {
> 42: for (XPage* entry; _iter.next(&entry);) {
> 43: if (entry != nullptr && entry != _prev) {
T
src/hotspot/share/gc/z/zHeap.cpp line 383:
> 381:
> 382: if (addr == zaddress::null) {
> 383: st->print_raw_cr("null");
T
src/hotspot/share/gc/z/zHeap.cpp line 438:
> 436:
> 437: if (addr == zaddress::null) {
> 438: st->print_raw_cr("null");
T
src/hotspot/share/interpreter/linkResolver.cpp line 816:
> 814: st->print("%s%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
> 815: prefix,
> 816: (klass == nullptr ? "<null>" : klass->internal_name()),
T
src/hotspot/share/jfr/dcmd/jfrDcmds.hpp line 162:
> 160: }
> 161: static const JavaPermission permission() {
> 162: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", nullptr};
T
src/hotspot/share/jfr/dcmd/jfrDcmds.hpp line 187:
> 185: }
> 186: static const JavaPermission permission() {
> 187: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", nullptr};
T
src/hotspot/share/jfr/recorder/checkpoint/types/jfrThreadState.cpp line 125:
> 123: }
> 124: }
> 125: assert(name_str != nullptr, "unexpected null thread name");
T
src/hotspot/share/jfr/recorder/repository/jfrRepository.cpp line 147:
> 145: const char* const canonical_chunk_path = JfrJavaSupport::c_str(path, jt);
> 146: if (nullptr == canonical_chunk_path && !_chunkwriter->is_valid()) {
> 147: // new output is null and current output is null
T
src/hotspot/share/jfr/recorder/stringpool/jfrStringPool.cpp line 119:
> 117: }
> 118: release(old, thread);
> 119: return new_buffer; // might be null
T
src/hotspot/share/jvmci/jvmciEnv.cpp line 366:
> 364: JNIAccessMark jni(this, THREAD);
> 365: jthrowable ex = jni()->ExceptionOccurred();
> 366: if (ex != nullptr) {
T
src/hotspot/share/logging/logAsyncWriter.cpp line 195:
> 193: if (self->_initialized) {
> 194: Atomic::release_store_fence(&AsyncLogWriter::_instance, self);
> 195: // All readers of _instance after the fence see non-null.
T
src/hotspot/share/logging/logConfiguration.cpp line 481:
> 479: const char* output_options,
> 480: outputStream* errstream) {
> 481: assert(errstream != nullptr, "errstream can not be null");
T
src/hotspot/share/logging/logConfiguration.hpp line 64:
> 62: static bool _async_mode;
> 63:
> 64: // Create a new output. Returns null if failed.
T
src/hotspot/share/logging/logMessageBuffer.hpp line 112:
> 110: // using set_prefix(). Lines added to the LogMessageBuffer after a prefix
> 111: // function has been set will be prefixed automatically.
> 112: // Setting this to null will disable prefixing.
T
src/hotspot/share/logging/logStream.hpp line 103:
> 101: : LogStreamImpl(LogTargetHandle(level, LogTagSetMapping<T0, T1, T2, T3, T4>::tagset())) {}
> 102:
> 103: // Constructor to support creation from typed (likely null) pointer. Mostly used by the logging framework.
T
src/hotspot/share/memory/metaspace.cpp line 878:
> 876: "allocation size too large (" SIZE_FORMAT ")", word_size);
> 877:
> 878: assert(loader_data != nullptr, "Should never pass around a null loader_data. "
T
src/hotspot/share/memory/metaspace/metachunk.cpp line 280:
> 278:
> 279: // Test base pointer
> 280: assert(base() != nullptr, "Base pointer null");
T
src/hotspot/share/memory/metaspace/metaspaceArena.cpp line 346:
> 344:
> 345: if (p == nullptr) {
> 346: UL(info, "allocation failed, returned null.");
T
src/hotspot/share/memory/universe.cpp line 469:
> 467: if (!is_reference_type((BasicType)i)) {
> 468: oop m = _basic_type_mirrors[i].resolve();
> 469: assert(m != nullptr, "archived mirrors should not be null");
T
src/hotspot/share/memory/virtualspace.cpp line 598:
> 596: // Last, desperate try without any placement.
> 597: if (_base == nullptr) {
> 598: log_trace(gc, heap, coops)("Trying to allocate at address null heap of size " SIZE_FORMAT_X, size + noaccess_prefix);
T
src/hotspot/share/oops/cpCache.cpp line 888:
> 886: const bool has_appendix = appendix.not_null();
> 887:
> 888: LogStream* log_stream = nullptr;
T
src/hotspot/share/oops/cpCache.cpp line 906:
> 904: objArrayOop resolved_references = constant_pool()->resolved_references();
> 905: assert(appendix_index >= 0 && appendix_index < resolved_references->length(), "oob");
> 906: assert(resolved_references->obj_at(appendix_index) == nullptr, "init just once");
T
src/hotspot/share/oops/cpCache.cpp line 914:
> 912: resolved_indy_entry_at(index)->fill_in(adapter, adapter->size_of_parameters(), as_TosState(adapter->result_type()), has_appendix);
> 913:
> 914: if (log_stream != nullptr) {
T
src/hotspot/share/prims/jvmtiAgent.cpp line 375:
> 373: HandleMark hm(thread);
> 374: extern struct JavaVM_ main_vm;
> 375: const jint err = (*on_load_entry)(&main_vm, const_cast<char*>(agent->options()), nullptr);
T
src/hotspot/share/prims/jvmtiThreadState.cpp line 248:
> 246:
> 247: // disable VTMS transitions for one virtual thread
> 248: // no-op if thread is non-null and not a virtual thread
T
src/hotspot/share/prims/whitebox.cpp line 1885:
> 1883: InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
> 1884: ConstantPool* cp = ik->constants();
> 1885: if (cp->cache() == nullptr) {
T
src/hotspot/share/prims/whitebox.cpp line 1894:
> 1892: InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
> 1893: ConstantPool* cp = ik->constants();
> 1894: if (cp->cache() == nullptr) {
T
src/hotspot/share/runtime/fieldDescriptor.cpp line 164:
> 162: obj->obj_field(offset())->print_value_on(st);
> 163: } else {
> 164: st->print("null");
T
src/hotspot/share/runtime/fieldDescriptor.cpp line 171:
> 169: obj->obj_field(offset())->print_value_on(st);
> 170: } else {
> 171: st->print("null");
T
src/hotspot/share/runtime/globals.hpp line 632:
> 630: \
> 631: develop(bool, InterceptOSException, false, \
> 632: "Start debugger when an implicit OS (e.g. null) " \
T
src/hotspot/share/runtime/handles.hpp line 71:
> 69: protected:
> 70: oop obj() const { return _handle == nullptr ? (oop)nullptr : *_handle; }
> 71: oop non_null_obj() const { assert(_handle != nullptr, "resolving null handle"); return *_handle; }
T
src/hotspot/share/runtime/handles.hpp line 147:
> 145: protected: \
> 146: type* obj() const { return _value; } \
> 147: type* non_null_obj() const { assert(_value != nullptr, "resolving null _value"); return _value; } \
T
src/hotspot/share/runtime/jniHandles.cpp line 381:
> 379: JNIHandleBlock* next = block->_next;
> 380: Atomic::dec(&_blocks_allocated);
> 381: assert(block->pop_frame_link() == nullptr, "pop_frame_link should be null");
T
src/hotspot/share/runtime/jniHandles.inline.hpp line 116:
> 114: assert(handle != nullptr, "JNI handle should not be null");
> 115: oop result = resolve_impl<DECORATORS_NONE, false /* external_guard */>(handle);
> 116: assert(result != nullptr, "null read from jni handle");
T
src/hotspot/share/runtime/objectMonitor.cpp line 539:
> 537: // Attempt async deflation protocol.
> 538:
> 539: // Set a null owner to DEFLATER_MARKER to force any contending thread
T
src/hotspot/share/runtime/objectMonitor.cpp line 564:
> 562: if (Atomic::cmpxchg(&_contentions, 0, INT_MIN) != 0) {
> 563: // Contentions was no longer 0 so we lost the race since the
> 564: // ObjectMonitor is now busy. Restore owner to null if it is
T
src/hotspot/share/runtime/objectMonitor.cpp line 669:
> 667: ss->print("owner=" INTPTR_FORMAT, p2i(owner_raw()));
> 668: } else {
> 669: // We report null instead of DEFLATER_MARKER here because is_busy()
T
src/hotspot/share/runtime/os.cpp line 1131:
> 1129: // Handle null first, so later checks don't need to protect against it.
> 1130: if (addr == nullptr) {
> 1131: st->print_cr("0x0 is null");
T
src/hotspot/share/runtime/safepoint.cpp line 235:
> 233: for (; JavaThread *cur = jtiwh.next(); ) {
> 234: ThreadSafepointState *cur_tss = cur->safepoint_state();
> 235: assert(cur_tss->get_next() == nullptr, "Must be null");
T
src/hotspot/share/runtime/thread.cpp line 269:
> 267: delete metadata_handles();
> 268:
> 269: // osthread() can be null, if creation of thread failed.
T
src/hotspot/share/runtime/thread.hpp line 343:
> 341: virtual const char* type_name() const { return "Thread"; }
> 342:
> 343: // Returns the current thread (ASSERTS if null)
T
src/hotspot/share/runtime/threadSMR.cpp line 623:
> 621: // Shared singleton data for all ThreadsList(0) instances.
> 622: // Used by _bootstrap_list to avoid static init time heap allocation.
> 623: // No real entries, just the final null terminator.
T
src/hotspot/share/runtime/threadSMR.cpp line 849:
> 847: _protected_java_thread = java_lang_Thread::thread(thread_oop);
> 848: assert(_protected_java_thread == nullptr || _tlh.includes(_protected_java_thread), "must be");
> 849: // If we captured a non-null JavaThread* after the _tlh was created
T
src/hotspot/share/runtime/vmOperations.cpp line 335:
> 333: jt->is_exiting() ||
> 334: jt->is_hidden_from_external_view()) {
> 335: // add a null snapshot if skipped
T
src/hotspot/share/services/threadService.cpp line 1071:
> 1069: oop ownerObj = java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(waitingToLockBlocker);
> 1070: currentThread = java_lang_Thread::thread(ownerObj);
> 1071: assert(currentThread != nullptr, "AbstractOwnableSynchronizer owning thread is unexpectedly null");
T
src/hotspot/share/utilities/concurrentHashTable.inline.hpp line 1295:
> 1293: return false;
> 1294: }
> 1295: assert(_new_table == nullptr || _new_table == POISON_PTR, "Must be null");
T
src/hotspot/share/utilities/copy.cpp line 73:
> 71: assert(src != nullptr, "address must not be null");
> 72: assert(dst != nullptr, "address must not be null");
> 73: assert(elem_size == 2 || elem_size == 4 || elem_size == 8,
T
src/hotspot/share/utilities/elfFile.cpp line 1827:
> 1825: }
> 1826:
> 1827: // If result is a null, we do not care about the content of the string being read.
T
src/hotspot/share/utilities/elfFuncDescTable.hpp line 135:
> 133: ~ElfFuncDescTable();
> 134:
> 135: // return the function address for the function descriptor at 'index' or null on error
T
src/hotspot/share/utilities/exceptions.cpp line 138:
> 136: // therefore the exception oop should be in the oopmap.
> 137: void Exceptions::_throw_oop(JavaThread* thread, const char* file, int line, oop exception) {
> 138: assert(exception != nullptr, "exception should not be null");
T
src/hotspot/share/utilities/exceptions.cpp line 145:
> 143: void Exceptions::_throw(JavaThread* thread, const char* file, int line, Handle h_exception, const char* message) {
> 144: ResourceMark rm(thread);
> 145: assert(h_exception() != nullptr, "exception should not be null");
T
src/hotspot/share/utilities/globalDefinitions.cpp line 162:
> 160: static_assert((size_t)HeapWordSize >= sizeof(juint),
> 161: "HeapWord should be at least as large as juint");
> 162: static_assert(sizeof(nullptr) == sizeof(char*), "null must be same size as pointer");
T
src/hotspot/share/utilities/globalDefinitions_gcc.hpp line 135:
> 133:
> 134: // gcc warns about applying offsetof() to non-POD object or calculating
> 135: // offset directly when base address is null. The -Wno-invalid-offsetof
T
src/hotspot/share/utilities/linkedlist.hpp line 174:
> 172:
> 173: virtual void add(LinkedListNode<E>* node) {
> 174: assert(node != nullptr, "null pointer");
T
src/hotspot/share/utilities/linkedlist.hpp line 388:
> 386:
> 387: virtual void add(LinkedListNode<E>* node) {
> 388: assert(node != nullptr, "null pointer");
T
src/hotspot/share/utilities/lockFreeStack.hpp line 79:
> 77:
> 78: // Atomically removes the top object from this stack and returns a
> 79: // pointer to that object, or null if this stack is empty. Acts as a
T
src/hotspot/share/utilities/lockFreeStack.hpp line 100:
> 98: }
> 99:
> 100: // Atomically exchange the list of elements with null, returning the old
T
src/hotspot/share/utilities/lockFreeStack.hpp line 146:
> 144: bool empty() const { return top() == nullptr; }
> 145:
> 146: // Return the most recently pushed element, or null if the stack is empty.
T
src/hotspot/share/utilities/nonblockingQueue.hpp line 48:
> 46: // A queue may temporarily appear to be empty even though elements have been
> 47: // added and not removed. For example, after running the following program,
> 48: // the value of r may be null.
T
src/hotspot/share/utilities/nonblockingQueue.hpp line 108:
> 106: // Thread-safe attempt to remove and return the first object in the queue.
> 107: // Returns true if successful. If successful then *node_ptr is the former
> 108: // first object, or null if the queue was empty. If unsuccessful, because
T
src/hotspot/share/utilities/nonblockingQueue.hpp line 114:
> 112: inline bool try_pop(T** node_ptr);
> 113:
> 114: // Thread-safe remove and return the first object in the queue, or null
T
src/hotspot/share/utilities/nonblockingQueue.hpp line 116:
> 114: // Thread-safe remove and return the first object in the queue, or null
> 115: // if the queue was empty. This just iterates on try_pop() until it
> 116: // succeeds, returning the (possibly null) element obtained from that.
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 88:
> 86: // An append operation atomically exchanges the new tail with the queue tail.
> 87: // It then sets the "next" value of the old tail to the head of the list being
> 88: // appended. If the old tail is null then the queue was empty, then the
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 111:
> 109: if (old_tail == nullptr) {
> 110: // If old_tail is null then the queue was empty, and _head must also be
> 111: // null. The correctness of this assertion depends on try_pop clearing
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 129:
> 127: } else {
> 128: // A concurrent try_pop has claimed old_tail, so it is no longer in the
> 129: // list. The queue was logically empty. _head is either null or
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 155:
> 153: // There are several cases for next_node.
> 154: // (1) next_node is the extension of the queue's list.
> 155: // (2) next_node is null, because a competing try_pop took old_head.
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 178:
> 176: // report it as such for consistency, though we could report the queue
> 177: // was empty. We don't attempt to further help [Clause 2] by also
> 178: // trying to set _tail to nullptr, as that would just ensure that one or
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 194:
> 192: // [Clause 2]
> 193: // Old_head was the last entry and we've claimed it by setting its next
> 194: // value to null. However, this leaves the queue in disarray. Fix up
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 203:
> 201: // also consistent with [Clause 1b].
> 202:
> 203: // Attempt to change the queue head from old_head to null. Failure of
T
src/hotspot/share/utilities/nonblockingQueue.inline.hpp line 208:
> 206: Atomic::cmpxchg(&_head, old_head, (T*)nullptr);
> 207:
> 208: // Attempt to change the queue tail from old_head to null. Failure of
T
src/hotspot/share/utilities/ostream.cpp line 709:
> 707: start_log();
> 708: } else {
> 709: // and leave xtty as null
T
src/hotspot/share/utilities/ostream.cpp line 771:
> 769: text->print_raw(p->key());
> 770: text->put('=');
> 771: assert(p->value() != nullptr, "p->value() is null");
T
src/hotspot/share/utilities/unsigned5.hpp line 327:
> 325: Writer(const ARR& array)
> 326: : _array(const_cast<ARR&>(array)), _limit_ptr(nullptr), _position(0) {
> 327: // Note: if _limit_ptr is null, the ARR& is never reassigned,
T
src/hotspot/share/utilities/utf8.hpp line 76:
> 74: // Utility methods
> 75:
> 76: // Returns null if 'c' it not found. This only works as long
T
src/hotspot/share/utilities/vmError.hpp line 45:
> 43: static char _detail_msg[1024];
> 44:
> 45: static Thread* _thread; // null if it's native thread
T
-------------
PR Review: https://git.openjdk.org/jdk/pull/14198#pullrequestreview-1449252066
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209159785
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209159872
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160289
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160378
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160527
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160578
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209161770
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160686
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209160791
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209161299
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209161367
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209161415
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209161470
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162033
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162094
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162234
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162319
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162344
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162424
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162602
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162648
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162687
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162835
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209162873
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163006
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163074
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163111
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163185
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163220
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163248
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163287
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163352
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163396
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163558
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163605
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163642
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163724
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163763
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163811
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163873
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209163927
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164027
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164087
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164125
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164508
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164848
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164910
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209164940
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165038
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165073
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165280
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165354
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165423
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165533
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165626
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165671
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165736
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165819
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209165977
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166087
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166196
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166250
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166340
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166433
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166563
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166748
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166817
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166925
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209166991
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167061
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167105
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167139
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167208
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167536
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167644
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167683
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167736
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167787
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167918
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209167968
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168014
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168057
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168094
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168142
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168185
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168230
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168252
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168310
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168372
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168414
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168454
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168522
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168564
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168609
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168655
PR Review Comment: https://git.openjdk.org/jdk/pull/14198#discussion_r1209168750
More information about the shenandoah-dev
mailing list