Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge master HEAD into openj9-staging #526

Merged
merged 23 commits into from
Dec 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
72dc91c
8296878: Document Filter attached to JPasswordField and setText("") i…
mrserb Nov 30, 2022
0cd3652
8297676: DataBuffer.TYPE_SHORT/TYPE_FLOAT/TYPE_DOUBLE are not placeho…
mrserb Nov 30, 2022
4ba29e6
8297749: Remove duplicate space in the ProtocolException message bein…
izeye Nov 30, 2022
f432ad8
8296924: C2: assert(is_valid_AArch64_address(dest.target())) failed: …
TobiHartmann Nov 30, 2022
bda4752
8297681: Unnecessary color conversion during 4BYTE_ABGR_PRE to INT_AR…
mrserb Nov 30, 2022
cca9e59
8252584: HotSpot Style Guide should permit alignas
TheShermanTanker Nov 30, 2022
2844bf8
8297515: serialVersionUID fields are not annotated with @Serial
minborg Nov 30, 2022
51beaf9
8296390: Incremental build failed with a NPE
lahodaj Nov 30, 2022
4296b5f
8295401: Error recovery in module-info.java could be improved
lahodaj Nov 30, 2022
5c16061
8297693: Fix typos in src/hotspot and test/hotspot files
jaikiran Nov 30, 2022
499ad24
8297523: Various GetPrimitiveArrayCritical miss result - NULL check
MBaesken Nov 30, 2022
e8bba00
8297740: runtime/ClassUnload/UnloadTest.java failed with "Test failed…
albertnetymk Nov 30, 2022
98c8613
8297731: Remove redundant check in MutableBigInteger.divide
jddarcy Nov 30, 2022
ae78dac
8297170: misc JCK tests fail with "FATAL ERROR in native method: JDWP…
plummercj Nov 30, 2022
71966cd
8297742: Combine vmTestbase/nsk/monitoring/ThreadMXBean/resetPeakThre…
Nov 30, 2022
2952e95
8297853: windows-x86 test build broken
magicus Nov 30, 2022
cb64c7f
8297736: test/jdk/java/foreign/TestMatrix.java is broken
JornVernee Nov 30, 2022
98707cb
8290231: java/foreign/malloc/TestMixedMallocFree.java crashed in JDK1…
JornVernee Nov 30, 2022
483e986
8297519: Improve expressions and modernise code in PKCS
minborg Nov 30, 2022
b8adc6f
8297728: Cache invocation type rather than invoker in NamedFunction
cl4es Nov 30, 2022
59cb746
8297802: display of @spec tags should mimic that of @see tags
jonathan-gibbons Dec 1, 2022
15cdcd8
Merge latest openjdk
j9build Dec 1, 2022
494f798
Merge master HEAD into openj9-staging
JasonFengJ9 Dec 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion doc/hotspot-style.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ <h1 class="title">HotSpot Coding Style</h1>
<li><a href="#expression-sfinae" id="toc-expression-sfinae">Expression
SFINAE</a></li>
<li><a href="#enum" id="toc-enum">enum</a></li>
<li><a href="#alignas" id="toc-alignas">alignas</a></li>
<li><a href="#thread_local" id="toc-thread_local">thread_local</a></li>
<li><a href="#nullptr" id="toc-nullptr">nullptr</a></li>
<li><a href="#atomic" id="toc-atomic">&lt;atomic&gt;</a></li>
Expand Down Expand Up @@ -598,7 +599,7 @@ <h3 id="c-standard-library">C++ Standard Library</h3>
<code>std::numeric_limits</code>.</li>
<li><code>#include &lt;type_traits&gt;</code>.</li>
<li><code>#include &lt;cstddef&gt;</code> to use
<code>std::nullptr_t</code>.</li>
<code>std::nullptr_t</code> and <code>std::max_align_t</code>.</li>
</ul>
<p>TODO: Rather than directly #including (permitted) Standard Library
headers, use a convention of #including wrapper headers (in some
Expand Down Expand Up @@ -670,6 +671,52 @@ <h3 id="enum">enum</h3>
constant members. Compilers having such bugs are no longer supported.
Except where an enum is semantically appropriate, new code should use
integral constants.</p>
<h3 id="alignas">alignas</h3>
<p><em>Alignment-specifiers</em> (<code>alignas</code> <a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">n2341</a>)
are permitted, with restrictions.</p>
<p><em>Alignment-specifiers</em> are permitted when the requested
alignment is a <em>fundamental alignment</em> (not greater than
<code>alignof(std::max_align_t)</code> <a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
3.11/2</a>).</p>
<p><em>Alignment-specifiers</em> with an <em>extended alignment</em>
(greater than <code>alignof(std::max_align_t)</code> <a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
3.11/3</a>) may only be used to align variables with static or automatic
storage duration (<a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
3.7.1, 3.7.3</a>). As a consequence, <em>over-aligned types</em> are
forbidden; this may change if HotSpot updates to using C++17 or later <a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r4.html">p0035r4</a>.</p>
<p>Large <em>extended alignments</em> should be avoided, particularly
for stack allocated objects. What is a large value may depend on the
platform and configuration. There may also be hard limits for some
platforms.</p>
<p>An <em>alignment-specifier</em> must always be applied to a
definition (<a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
10.6.2/6</a>). (C++ allows an <em>alignment-specifier</em> to optionally
also be applied to a declaration, so long as the definition has
equivalent alignment. There isn't any known benefit from duplicating the
alignment in a non-definition declaration, so such duplication should be
avoided in HotSpot code.)</p>
<p>Enumerations are forbidden from having <em>alignment-specifiers</em>.
Aligned enumerations were originally permitted but insufficiently
specified, and were later (C++20) removed <a
href="https://cplusplus.github.io/CWG/issues/2354.html">CWG 2354</a>.
Permitting such usage in HotSpot now would just cause problems in the
future.</p>
<p><em>Alignment-specifiers</em> are forbidden in <code>typedef</code>
and <em>alias-declarations</em>. This may work or may have worked in
some versions of some compilers, but was later (C++14) explicitly
disallowed <a
href="https://cplusplus.github.io/CWG/issues/1437.html">CWG
1437</a>.</p>
<p>The HotSpot macro <code>ATTRIBUTE_ALIGNED</code> provides similar
capabilities for platforms that define it. This macro predates the use
by HotSpot of C++ versions providing <code>alignas</code>. New code
should use <code>alignas</code>.</p>
<h3 id="thread_local">thread_local</h3>
<p>Avoid use of <code>thread_local</code> (<a
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm">n2659</a>);
Expand Down
47 changes: 46 additions & 1 deletion doc/hotspot-style.md
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ There are a few exceptions to this rule.
* `#include <new>` to use placement `new`, `std::nothrow`, and `std::nothrow_t`.
* `#include <limits>` to use `std::numeric_limits`.
* `#include <type_traits>`.
* `#include <cstddef>` to use `std::nullptr_t`.
* `#include <cstddef>` to use `std::nullptr_t` and `std::max_align_t`.

TODO: Rather than directly \#including (permitted) Standard Library
headers, use a convention of \#including wrapper headers (in some
Expand Down Expand Up @@ -651,6 +651,51 @@ constant members. Compilers having such bugs are no longer supported.
Except where an enum is semantically appropriate, new code should use
integral constants.

### alignas

_Alignment-specifiers_ (`alignas`
[n2341](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf))
are permitted, with restrictions.

_Alignment-specifiers_ are permitted when the requested alignment is a
_fundamental alignment_ (not greater than `alignof(std::max_align_t)`
[C++14 3.11/2](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).

_Alignment-specifiers_ with an _extended alignment_ (greater than
`alignof(std::max_align_t)`
[C++14 3.11/3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf))
may only be used to align variables with static or automatic storage duration
([C++14 3.7.1, 3.7.3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
As a consequence, _over-aligned types_ are forbidden; this may change if
HotSpot updates to using C++17 or later
[p0035r4](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r4.html).

Large _extended alignments_ should be avoided, particularly for stack
allocated objects. What is a large value may depend on the platform and
configuration. There may also be hard limits for some platforms.

An _alignment-specifier_ must always be applied to a definition
([C++14 10.6.2/6](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
(C++ allows an _alignment-specifier_ to optionally also be applied to a
declaration, so long as the definition has equivalent alignment. There isn't
any known benefit from duplicating the alignment in a non-definition
declaration, so such duplication should be avoided in HotSpot code.)

Enumerations are forbidden from having _alignment-specifiers_. Aligned
enumerations were originally permitted but insufficiently specified, and were
later (C++20) removed
[CWG 2354](https://cplusplus.github.io/CWG/issues/2354.html).
Permitting such usage in HotSpot now would just cause problems in the future.

_Alignment-specifiers_ are forbidden in `typedef` and _alias-declarations_.
This may work or may have worked in some versions of some compilers, but was
later (C++14) explicitly disallowed
[CWG 1437](https://cplusplus.github.io/CWG/issues/1437.html).

The HotSpot macro `ATTRIBUTE_ALIGNED` provides similar capabilities for
platforms that define it. This macro predates the use by HotSpot of C++
versions providing `alignas`. New code should use `alignas`.

### thread_local

Avoid use of `thread_local`
Expand Down
23 changes: 13 additions & 10 deletions src/java.base/share/classes/java/lang/invoke/LambdaForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -1089,7 +1089,7 @@ boolean contains(Name name) {
static class NamedFunction {
final MemberName member;
private @Stable MethodHandle resolvedHandle;
@Stable MethodHandle invoker;
private @Stable MethodType type;

NamedFunction(MethodHandle resolvedHandle) {
this(resolvedHandle.internalMemberName(), resolvedHandle);
Expand Down Expand Up @@ -1185,10 +1185,6 @@ Object invokeWithArgumentsTracing(Object[] arguments) throws Throwable {
Object rval;
try {
traceInterpreter("[ call", this, arguments);
if (invoker == null) {
traceInterpreter("| getInvoker", this);
invoker();
}
// resolvedHandle might be uninitialized, ok for tracing
if (resolvedHandle == null) {
traceInterpreter("| resolve", this);
Expand All @@ -1204,17 +1200,24 @@ Object invokeWithArgumentsTracing(Object[] arguments) throws Throwable {
}

private MethodHandle invoker() {
if (invoker != null) return invoker;
// Get an invoker and cache it.
return invoker = computeInvoker(methodType().form());
return computeInvoker(methodType().form());
}

MethodType methodType() {
if (resolvedHandle != null)
MethodType type = this.type;
if (type == null) {
this.type = type = calculateMethodType(member, resolvedHandle);
}
return type;
}

private static MethodType calculateMethodType(MemberName member, MethodHandle resolvedHandle) {
if (resolvedHandle != null) {
return resolvedHandle.type();
else
} else {
// only for certain internal LFs during bootstrapping
return member.getInvocationType();
}
}

MemberName member() {
Expand Down
13 changes: 5 additions & 8 deletions src/java.base/share/classes/java/math/MutableBigInteger.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -1531,13 +1531,10 @@ private MutableBigInteger divideMagnitude(MutableBigInteger div,
quotient.intLen = limit;
int[] q = quotient.value;


// Must insert leading 0 in rem if its length did not change
if (rem.intLen == nlen) {
rem.offset = 0;
rem.value[0] = 0;
rem.intLen++;
}
// Insert leading 0 in rem
rem.offset = 0;
rem.value[0] = 0;
rem.intLen++;

int dh = divisor[0];
long dhLong = dh & LONG_MASK;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1999,8 +1999,8 @@ private InputStream getInputStream0() throws IOException {
return inputStream;
} while (redirects < maxRedirects);

throw new ProtocolException("Server redirected too many " +
" times ("+ redirects + ")");
throw new ProtocolException("Server redirected too many times (" +
redirects + ")");
} catch (RuntimeException e) {
disconnectInternal();
rememberedException = e;
Expand Down
15 changes: 8 additions & 7 deletions src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m
Original file line number Diff line number Diff line change
Expand Up @@ -136,15 +136,16 @@ - (BOOL) checkPasteboardWithoutNotification:(id)application {
jint nElements = (*env)->GetArrayLength(env, inTypes);
NSMutableArray *formatArray = [NSMutableArray arrayWithCapacity:nElements];
jlong *elements = (*env)->GetPrimitiveArrayCritical(env, inTypes, NULL);
if (elements != NULL) {
for (i = 0; i < nElements; i++) {
NSString *pbFormat = formatForIndex(elements[i]);
if (pbFormat)
[formatArray addObject:pbFormat];
}

for (i = 0; i < nElements; i++) {
NSString *pbFormat = formatForIndex(elements[i]);
if (pbFormat)
[formatArray addObject:pbFormat];
(*env)->ReleasePrimitiveArrayCritical(env, inTypes, elements, JNI_ABORT);
[[CClipboard sharedClipboard] declareTypes:formatArray withOwner:inJavaClip jniEnv:env];
}

(*env)->ReleasePrimitiveArrayCritical(env, inTypes, elements, JNI_ABORT);
[[CClipboard sharedClipboard] declareTypes:formatArray withOwner:inJavaClip jniEnv:env];
JNI_COCOA_EXIT(env);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,14 @@
{
jint *glyphCodeInts = (*env)->GetPrimitiveArrayCritical(env, glyphs, 0);

CTS_GetGlyphsAsIntsForCharacters(awtFont, unicodes,
cgGlyphs, glyphCodeInts, count);
if (glyphCodeInts != NULL) {
CTS_GetGlyphsAsIntsForCharacters(awtFont, unicodes,
cgGlyphs, glyphCodeInts, count);

// Do not use JNI_COMMIT, as that will not free the buffer copy
// when +ProtectJavaHeap is on.
(*env)->ReleasePrimitiveArrayCritical(env, glyphs, glyphCodeInts, 0);
// Do not use JNI_COMMIT, as that will not free the buffer copy
// when +ProtectJavaHeap is on.
(*env)->ReleasePrimitiveArrayCritical(env, glyphs, glyphCodeInts, 0);
}
}

static inline void
Expand Down
12 changes: 7 additions & 5 deletions src/java.desktop/macosx/native/libosxui/JRSUIController.m
Original file line number Diff line number Diff line change
Expand Up @@ -277,11 +277,13 @@ static inline jint doPaintCGContext(CGContextRef cgRef, jlong controlPtr, jlong
CGRect partBounds = JRSUIControlGetScrollBarPartBounds(control, frame, part);

jdouble *rect = (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL);
rect[0] = partBounds.origin.x;
rect[1] = partBounds.origin.y;
rect[2] = partBounds.size.width;
rect[3] = partBounds.size.height;
(*env)->ReleasePrimitiveArrayCritical(env, rectArray, rect, 0);
if (rect != NULL) {
rect[0] = partBounds.origin.x;
rect[1] = partBounds.origin.y;
rect[2] = partBounds.size.width;
rect[3] = partBounds.size.height;
(*env)->ReleasePrimitiveArrayCritical(env, rectArray, rect, 0);
}
}

/*
Expand Down
16 changes: 8 additions & 8 deletions src/java.desktop/share/classes/java/awt/image/DataBuffer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -35,13 +35,13 @@

package java.awt.image;

import sun.java2d.StateTrackable.State;
import static sun.java2d.StateTrackable.State.*;
import sun.java2d.StateTrackableDelegate;
import java.lang.annotation.Native;

import sun.awt.image.SunWritableRaster;
import sun.java2d.StateTrackable.State;
import sun.java2d.StateTrackableDelegate;

import java.lang.annotation.Native;
import static sun.java2d.StateTrackable.State.UNTRACKABLE;

/**
* This class exists to wrap one or more data arrays. Each data array in
Expand Down Expand Up @@ -75,16 +75,16 @@ public abstract class DataBuffer {
/** Tag for unsigned short data. */
@Native public static final int TYPE_USHORT = 1;

/** Tag for signed short data. Placeholder for future use. */
/** Tag for signed short data. */
@Native public static final int TYPE_SHORT = 2;

/** Tag for int data. */
@Native public static final int TYPE_INT = 3;

/** Tag for float data. Placeholder for future use. */
/** Tag for float data. */
@Native public static final int TYPE_FLOAT = 4;

/** Tag for double data. Placeholder for future use. */
/** Tag for double data. */
@Native public static final int TYPE_DOUBLE = 5;

/** Tag for undefined data. */
Expand Down
38 changes: 23 additions & 15 deletions src/java.desktop/share/classes/javax/swing/JPasswordField.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -36,8 +36,10 @@
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleText;
import javax.accessibility.AccessibleTextSequence;
import javax.swing.text.AbstractDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.DocumentFilter;
import javax.swing.text.Segment;

/**
Expand Down Expand Up @@ -300,21 +302,27 @@ public String getText(int offs, int len) throws BadLocationException {
public void setText(String t) {
// overwrite the old data first
Document doc = getDocument();
int nleft = doc.getLength();
Segment text = new Segment();
// we would like to get direct data array access, not a copy of it
text.setPartialReturn(true);
int offs = 0;
try {
while (nleft > 0) {
doc.getText(offs, nleft, text);
Arrays.fill(text.array, text.offset,
text.count + text.offset, '\u0000');
nleft -= text.count;
offs += text.count;
DocumentFilter filter = null;
if (doc instanceof AbstractDocument adoc) {
filter = adoc.getDocumentFilter();
}
if (filter == null) {
int nleft = doc.getLength();
Segment text = new Segment();
// we would like to get direct data array access, not a copy of it
text.setPartialReturn(true);
int offs = 0;
try {
while (nleft > 0) {
doc.getText(offs, nleft, text);
Arrays.fill(text.array, text.offset,
text.count + text.offset, '\u0000');
nleft -= text.count;
offs += text.count;
}
} catch (BadLocationException ignored) {
// we tried
}
} catch (BadLocationException ignored) {
// we tried
}
super.setText(t);
}
Expand Down
Loading