Merge
This commit is contained in:
commit
d4b040f42d
@ -1478,6 +1478,9 @@ void LIR_Assembler::cmove(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, L
|
|||||||
__ mov_double(result->as_double_reg(), c->as_jdouble(), acond);
|
__ mov_double(result->as_double_reg(), c->as_jdouble(), acond);
|
||||||
#endif // __SOFTFP__
|
#endif // __SOFTFP__
|
||||||
break;
|
break;
|
||||||
|
case T_METADATA:
|
||||||
|
__ mov_metadata(result->as_register(), c->as_metadata(), acond);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
}
|
}
|
||||||
|
@ -2439,7 +2439,7 @@ class LIR_OpVisitState: public StackObj {
|
|||||||
typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
|
typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
maxNumberOfOperands = 20,
|
maxNumberOfOperands = 21,
|
||||||
maxNumberOfInfos = 4
|
maxNumberOfInfos = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ void VM_BaseGetOrSetLocal::doit() {
|
|||||||
|
|
||||||
frame fr = _jvf->fr();
|
frame fr = _jvf->fr();
|
||||||
if (_set && _depth != 0 && Continuation::is_frame_in_continuation(_jvf->thread(), fr)) {
|
if (_set && _depth != 0 && Continuation::is_frame_in_continuation(_jvf->thread(), fr)) {
|
||||||
_result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals currently unsupported in continuations
|
_result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals are not fully supported in continuations
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -644,6 +644,17 @@ void VM_BaseGetOrSetLocal::doit() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_set) {
|
if (_set) {
|
||||||
|
if (fr.is_heap_frame()) { // we want this check after the check for JVMTI_ERROR_INVALID_SLOT
|
||||||
|
assert(Continuation::is_frame_in_continuation(_jvf->thread(), fr), "sanity check");
|
||||||
|
// If the topmost frame is a heap frame, then it hasn't been thawed. This can happen
|
||||||
|
// if we are executing at a return barrier safepoint. The callee frame has been popped,
|
||||||
|
// but the caller frame has not been thawed. We can't support a JVMTI SetLocal in the callee
|
||||||
|
// frame at this point, because we aren't truly in the callee yet.
|
||||||
|
// fr.is_heap_frame() is impossible if a continuation is at a single step or breakpoint.
|
||||||
|
_result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals are not fully supported in continuations
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Force deoptimization of frame if compiled because it's
|
// Force deoptimization of frame if compiled because it's
|
||||||
// possible the compiler emitted some locals as constant values,
|
// possible the compiler emitted some locals as constant values,
|
||||||
// meaning they are not mutable.
|
// meaning they are not mutable.
|
||||||
|
@ -458,7 +458,11 @@ public final class ImageReader implements AutoCloseable {
|
|||||||
makeDirectories(path);
|
makeDirectories(path);
|
||||||
} else { // a resource
|
} else { // a resource
|
||||||
makeDirectories(childloc.buildName(true, true, false));
|
makeDirectories(childloc.buildName(true, true, false));
|
||||||
newResource(dir, childloc);
|
// if we have already created a resource for this name previously, then don't
|
||||||
|
// recreate it
|
||||||
|
if (!nodes.containsKey(childloc.getFullName(true))) {
|
||||||
|
newResource(dir, childloc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
dir.setCompleted(true);
|
dir.setCompleted(true);
|
||||||
@ -753,6 +757,7 @@ public final class ImageReader implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addChild(Node node) {
|
void addChild(Node node) {
|
||||||
|
assert !children.contains(node) : "Child " + node + " already added";
|
||||||
children.add(node);
|
children.add(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<title>AWT Threading Issues</title>
|
<title>AWT Threading Issues</title>
|
||||||
</head>
|
</head>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
|
Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
|
||||||
This code is free software; you can redistribute it and/or modify it
|
This code is free software; you can redistribute it and/or modify it
|
||||||
@ -118,11 +118,7 @@ The implementation-specific details are given below.
|
|||||||
Implementation-dependent behavior.
|
Implementation-dependent behavior.
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
Prior to 1.4, the helper threads were never terminated.
|
AWT terminates all its
|
||||||
<p>
|
|
||||||
Starting with 1.4, the behavior has changed as a result of the fix for
|
|
||||||
<a href="https://bugs.java.com/view_bug.do?bug_id=4030718">
|
|
||||||
4030718</a>. With the current implementation, AWT terminates all its
|
|
||||||
helper threads allowing the application to exit cleanly when the
|
helper threads allowing the application to exit cleanly when the
|
||||||
following three conditions are true:
|
following three conditions are true:
|
||||||
<ul>
|
<ul>
|
||||||
@ -153,13 +149,7 @@ exit cleanly under normal conditions, it is not guaranteed that it
|
|||||||
will exit cleanly in all cases. Two examples:
|
will exit cleanly in all cases. Two examples:
|
||||||
<ul>
|
<ul>
|
||||||
<li> Other packages can create displayable components for internal
|
<li> Other packages can create displayable components for internal
|
||||||
needs and never make them undisplayable. See
|
needs and never make them undisplayable.
|
||||||
<a href="https://bugs.java.com/view_bug.do?bug_id=4515058">
|
|
||||||
4515058</a>,
|
|
||||||
<a href="https://bugs.java.com/view_bug.do?bug_id=4671025">
|
|
||||||
4671025</a>, and
|
|
||||||
<a href="https://bugs.java.com/view_bug.do?bug_id=4465537">
|
|
||||||
4465537</a>.
|
|
||||||
<li> Both Microsoft Windows and X11 allow an application to send native
|
<li> Both Microsoft Windows and X11 allow an application to send native
|
||||||
events to windows that belong to another application. With this
|
events to windows that belong to another application. With this
|
||||||
feature it is possible to write a malicious program that will
|
feature it is possible to write a malicious program that will
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -32,8 +32,8 @@ import java.util.List;
|
|||||||
* A class representing the tags found in an Exif IFD. Exif is a
|
* A class representing the tags found in an Exif IFD. Exif is a
|
||||||
* standard for annotating images used by most digital camera
|
* standard for annotating images used by most digital camera
|
||||||
* manufacturers. The Exif specification may be found at
|
* manufacturers. The Exif specification may be found at
|
||||||
* <a href="http://www.exif.org/Exif2-2.PDF">
|
* <a href="https://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf">
|
||||||
* {@code http://www.exif.org/Exif2-2.PDF}
|
* {@code https://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf}
|
||||||
* </a>.
|
* </a>.
|
||||||
*
|
*
|
||||||
* <p> The definitions of the data types referenced by the field
|
* <p> The definitions of the data types referenced by the field
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -2140,8 +2140,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a {@code LayoutStyle} implementing the Java look and feel
|
* Returns a {@code LayoutStyle} implementing the Java look and feel
|
||||||
* design guidelines as specified at
|
* design guidelines.
|
||||||
* <a href="http://www.oracle.com/technetwork/java/hig-136467.html">http://www.oracle.com/technetwork/java/hig-136467.html</a>.
|
|
||||||
*
|
*
|
||||||
* @return LayoutStyle implementing the Java look and feel design
|
* @return LayoutStyle implementing the Java look and feel design
|
||||||
* guidelines
|
* guidelines
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<title>Using the Multiplexing Look and Feel</title>
|
<title>Using the Multiplexing Look and Feel</title>
|
||||||
</head>
|
</head>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved.
|
Copyright (c) 1998, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
|
||||||
This code is free software; you can redistribute it and/or modify it
|
This code is free software; you can redistribute it and/or modify it
|
||||||
@ -33,19 +33,6 @@
|
|||||||
<main role="main">
|
<main role="main">
|
||||||
<h1>Using the Multiplexing Look and Feel</h1>
|
<h1>Using the Multiplexing Look and Feel</h1>
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<hr>
|
|
||||||
<p>
|
|
||||||
<i>
|
|
||||||
This document is based on an article
|
|
||||||
originally published in
|
|
||||||
<a href="http://www.oracle.com/technetwork/java/javase/tech/articles-jsp-139072.html"
|
|
||||||
target="_top"><em>The Swing Connection</em></a>.
|
|
||||||
</i>
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The Multiplexing look and feel lets
|
The Multiplexing look and feel lets
|
||||||
you supplement an ordinary look and feel
|
you supplement an ordinary look and feel
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
@ -39,7 +39,7 @@ import org.w3c.dom.Node;
|
|||||||
*
|
*
|
||||||
* @xerces.internal
|
* @xerces.internal
|
||||||
*
|
*
|
||||||
* @LastModified: Oct 2017
|
* @LastModified: June 2022
|
||||||
*/
|
*/
|
||||||
public class AttributeMap extends NamedNodeMapImpl {
|
public class AttributeMap extends NamedNodeMapImpl {
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ public class AttributeMap extends NamedNodeMapImpl {
|
|||||||
} else {
|
} else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
@ -193,7 +193,7 @@ public class AttributeMap extends NamedNodeMapImpl {
|
|||||||
} else {
|
} else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
@ -591,7 +591,7 @@ public class AttributeMap extends NamedNodeMapImpl {
|
|||||||
else {
|
else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
@ -89,7 +89,7 @@ import org.w3c.dom.Text;
|
|||||||
*
|
*
|
||||||
* @author Elena Litani, IBM
|
* @author Elena Litani, IBM
|
||||||
* @author Neeraj Bajaj, Sun Microsystems, inc.
|
* @author Neeraj Bajaj, Sun Microsystems, inc.
|
||||||
* @LastModified: Apr 2019
|
* @LastModified: June 2022
|
||||||
*/
|
*/
|
||||||
public class DOMNormalizer implements XMLDocumentHandler {
|
public class DOMNormalizer implements XMLDocumentHandler {
|
||||||
|
|
||||||
@ -140,9 +140,6 @@ public class DOMNormalizer implements XMLDocumentHandler {
|
|||||||
/** Stores all namespace bindings on the current element */
|
/** Stores all namespace bindings on the current element */
|
||||||
protected final NamespaceContext fLocalNSBinder = new NamespaceSupport();
|
protected final NamespaceContext fLocalNSBinder = new NamespaceSupport();
|
||||||
|
|
||||||
/** list of attributes */
|
|
||||||
protected final List<Node> fAttributeList = new ArrayList<>(5);
|
|
||||||
|
|
||||||
/** DOM Locator - for namespace fixup algorithm */
|
/** DOM Locator - for namespace fixup algorithm */
|
||||||
protected final DOMLocatorImpl fLocator = new DOMLocatorImpl();
|
protected final DOMLocatorImpl fLocator = new DOMLocatorImpl();
|
||||||
|
|
||||||
@ -885,9 +882,9 @@ public class DOMNormalizer implements XMLDocumentHandler {
|
|||||||
if (attributes != null) {
|
if (attributes != null) {
|
||||||
|
|
||||||
// clone content of the attributes
|
// clone content of the attributes
|
||||||
attributes.cloneMap(fAttributeList);
|
List<Node> attrList = attributes.cloneMap(new ArrayList<>());
|
||||||
for (int i = 0; i < fAttributeList.size(); i++) {
|
for (int i = 0; i < attrList.size(); i++) {
|
||||||
Attr attr = (Attr) fAttributeList.get(i);
|
Attr attr = (Attr) attrList.get(i);
|
||||||
fLocator.fRelatedNode = attr;
|
fLocator.fRelatedNode = attr;
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
@ -56,7 +56,7 @@ import org.w3c.dom.Node;
|
|||||||
* @xerces.internal
|
* @xerces.internal
|
||||||
*
|
*
|
||||||
* @since PR-DOM-Level-1-19980818.
|
* @since PR-DOM-Level-1-19980818.
|
||||||
* @LastModified: Jan 2018
|
* @LastModified: June 2022
|
||||||
*/
|
*/
|
||||||
public class NamedNodeMapImpl
|
public class NamedNodeMapImpl
|
||||||
implements NamedNodeMap, Serializable {
|
implements NamedNodeMap, Serializable {
|
||||||
@ -197,7 +197,7 @@ public class NamedNodeMapImpl
|
|||||||
} else {
|
} else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
@ -247,7 +247,7 @@ public class NamedNodeMapImpl
|
|||||||
} else {
|
} else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
@ -562,7 +562,7 @@ public class NamedNodeMapImpl
|
|||||||
else {
|
else {
|
||||||
i = -1 - i; // Insert point (may be end of list)
|
i = -1 - i; // Insert point (may be end of list)
|
||||||
if (null == nodes) {
|
if (null == nodes) {
|
||||||
nodes = new ArrayList<>(5);
|
nodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
nodes.add(i, arg);
|
nodes.add(i, arg);
|
||||||
}
|
}
|
||||||
|
@ -97,6 +97,7 @@ import com.sun.tools.javac.tree.JCTree.JCSwitchExpression;
|
|||||||
import com.sun.tools.javac.tree.JCTree.LetExpr;
|
import com.sun.tools.javac.tree.JCTree.LetExpr;
|
||||||
import com.sun.tools.javac.tree.TreeInfo;
|
import com.sun.tools.javac.tree.TreeInfo;
|
||||||
import com.sun.tools.javac.util.Assert;
|
import com.sun.tools.javac.util.Assert;
|
||||||
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||||
import com.sun.tools.javac.util.List;
|
import com.sun.tools.javac.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -284,7 +285,7 @@ public class TransPatterns extends TreeTranslator {
|
|||||||
names.fromString(target.syntheticNameChar() + "c" + target.syntheticNameChar() + component.name),
|
names.fromString(target.syntheticNameChar() + "c" + target.syntheticNameChar() + component.name),
|
||||||
component.erasure(types),
|
component.erasure(types),
|
||||||
currentMethodSym);
|
currentMethodSym);
|
||||||
Symbol accessor = getAccessor(component);
|
Symbol accessor = getAccessor(tree.pos(), component);
|
||||||
JCVariableDecl nestedTempVar =
|
JCVariableDecl nestedTempVar =
|
||||||
make.VarDef(nestedTemp,
|
make.VarDef(nestedTemp,
|
||||||
make.App(make.QualIdent(accessor),
|
make.App(make.QualIdent(accessor),
|
||||||
@ -344,12 +345,8 @@ public class TransPatterns extends TreeTranslator {
|
|||||||
result = test != null ? test : makeLit(syms.booleanType, 1);
|
result = test != null ? test : makeLit(syms.booleanType, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MethodSymbol getAccessor(RecordComponent component) {
|
private MethodSymbol getAccessor(DiagnosticPosition pos, RecordComponent component) {
|
||||||
return component2Proxy.computeIfAbsent(component, c -> {
|
return component2Proxy.computeIfAbsent(component, c -> {
|
||||||
MethodSymbol realAccessor = (MethodSymbol) component.owner
|
|
||||||
.members()
|
|
||||||
.findFirst(component.name, s -> s.kind == Kind.MTH &&
|
|
||||||
((MethodSymbol) s).params.isEmpty());
|
|
||||||
MethodType type = new MethodType(List.of(component.owner.erasure(types)),
|
MethodType type = new MethodType(List.of(component.owner.erasure(types)),
|
||||||
types.erasure(component.type),
|
types.erasure(component.type),
|
||||||
List.nil(),
|
List.nil(),
|
||||||
@ -359,7 +356,7 @@ public class TransPatterns extends TreeTranslator {
|
|||||||
type,
|
type,
|
||||||
currentClass);
|
currentClass);
|
||||||
JCStatement accessorStatement =
|
JCStatement accessorStatement =
|
||||||
make.Return(make.App(make.Select(make.Ident(proxy.params().head), realAccessor)));
|
make.Return(make.App(make.Select(make.Ident(proxy.params().head), c.accessor)));
|
||||||
VarSymbol ctch = new VarSymbol(Flags.SYNTHETIC,
|
VarSymbol ctch = new VarSymbol(Flags.SYNTHETIC,
|
||||||
names.fromString("catch" + currentClassTree.pos + target.syntheticNameChar()),
|
names.fromString("catch" + currentClassTree.pos + target.syntheticNameChar()),
|
||||||
syms.throwableType,
|
syms.throwableType,
|
||||||
|
@ -42,8 +42,7 @@ import sun.net.httpserver.simpleserver.OutputFilter;
|
|||||||
* A simple HTTP file server and its components (intended for testing,
|
* A simple HTTP file server and its components (intended for testing,
|
||||||
* development and debugging purposes only).
|
* development and debugging purposes only).
|
||||||
*
|
*
|
||||||
* <p> A <a href="#server-impl">simple file server</a> is composed of three
|
* <p> A simple file server is composed of three components:
|
||||||
* components:
|
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li> an {@link HttpServer HttpServer} that is bound to a given address, </li>
|
* <li> an {@link HttpServer HttpServer} that is bound to a given address, </li>
|
||||||
* <li> an {@link HttpHandler HttpHandler} that serves files from a given
|
* <li> an {@link HttpHandler HttpHandler} that serves files from a given
|
||||||
|
@ -111,6 +111,7 @@ serviceability/sa/sadebugd/DebugdConnectTest.java 8239062,8270326 macosx-x64,mac
|
|||||||
serviceability/sa/TestRevPtrsForInvokeDynamic.java 8241235 generic-all
|
serviceability/sa/TestRevPtrsForInvokeDynamic.java 8241235 generic-all
|
||||||
|
|
||||||
serviceability/jvmti/ModuleAwareAgents/ThreadStart/MAAThreadStart.java 8225354 windows-all
|
serviceability/jvmti/ModuleAwareAgents/ThreadStart/MAAThreadStart.java 8225354 windows-all
|
||||||
|
serviceability/jvmti/vthread/GetSetLocalTest/GetSetLocalTest.java 8286836 generic-all
|
||||||
serviceability/dcmd/gc/RunFinalizationTest.java 8227120 linux-all,windows-x64
|
serviceability/dcmd/gc/RunFinalizationTest.java 8227120 linux-all,windows-x64
|
||||||
|
|
||||||
serviceability/sa/ClhsdbCDSCore.java 8269982,8267433 macosx-aarch64,macosx-x64
|
serviceability/sa/ClhsdbCDSCore.java 8269982,8267433 macosx-aarch64,macosx-x64
|
||||||
|
57
test/hotspot/jtreg/compiler/c1/TestManyMethodParameters.java
Normal file
57
test/hotspot/jtreg/compiler/c1/TestManyMethodParameters.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 SAP SE. 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
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 8288781
|
||||||
|
* @summary Test if a call with 8 integer + 13 float = 21 parameters can can be compiled.
|
||||||
|
* On ppc all parameters can be passed in registers.
|
||||||
|
* @author Richard Reingruber
|
||||||
|
*
|
||||||
|
* @run main/othervm -Xbatch -XX:CompileCommand=dontinline,*::*dontinline* compiler.c1.TestManyMethodParameters
|
||||||
|
*/
|
||||||
|
|
||||||
|
package compiler.c1;
|
||||||
|
|
||||||
|
public class TestManyMethodParameters {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
for (int i = 30_000; i >= 0; i--) {
|
||||||
|
double sum = testMethod_01_dontinline();
|
||||||
|
if (sum != 127) {
|
||||||
|
throw new Error("Wrong sum: " + sum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double testMethod_01_dontinline() {
|
||||||
|
return testMethod_01_manyArgs(1, 2, 3, 4, 5, 6, 7, 8,
|
||||||
|
1.0d, 2.0d, 3.0d, 4.0d, 5.0d, 6.0d, 7.0d, 8.0d, 9.0d, 10.0d, 11.0d, 12.0d, 13.0d);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double testMethod_01_manyArgs(long l1, long l2, long l3, long l4, long l5, long l6, long l7, long l8,
|
||||||
|
double d1, double d2, double d3, double d4, double d5, double d6, double d7,
|
||||||
|
double d8, double d9, double d10, double d11, double d12, double d13) {
|
||||||
|
return l1+l2+l3+l4+l5+l6+l7+l8+d1+d2+d3+d4+d5+d6+d7+d8+d9+d10+d11+d12+d13;
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,7 @@
|
|||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @test
|
* @test
|
||||||
* @bug 8288976
|
* @bug 8288976
|
||||||
* @library /test/lib
|
* @library /test/lib
|
||||||
@ -31,7 +31,6 @@
|
|||||||
* java.management
|
* java.management
|
||||||
* @compile C.java
|
* @compile C.java
|
||||||
* @run driver Bad_NCDFE_Msg
|
* @run driver Bad_NCDFE_Msg
|
||||||
*/
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import jdk.test.lib.process.ProcessTools;
|
import jdk.test.lib.process.ProcessTools;
|
||||||
|
@ -35,8 +35,7 @@ import java.util.concurrent.*;
|
|||||||
public class GetSetLocalTest {
|
public class GetSetLocalTest {
|
||||||
private static final String agentLib = "GetSetLocalTest";
|
private static final String agentLib = "GetSetLocalTest";
|
||||||
|
|
||||||
static final int MSG_COUNT = 600*1000;
|
static SynchronousQueue<String> QUEUE;
|
||||||
static final SynchronousQueue<String> QUEUE = new SynchronousQueue<>();
|
|
||||||
static native boolean completed();
|
static native boolean completed();
|
||||||
static native void enableEvents(Thread thread);
|
static native void enableEvents(Thread thread);
|
||||||
static native void testSuspendedVirtualThreads(Thread thread);
|
static native void testSuspendedVirtualThreads(Thread thread);
|
||||||
@ -56,19 +55,17 @@ public class GetSetLocalTest {
|
|||||||
|
|
||||||
static final Runnable PRODUCER = () -> {
|
static final Runnable PRODUCER = () -> {
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < MSG_COUNT; i++) {
|
while (!completed()) {
|
||||||
if (completed()) {
|
|
||||||
consumer.interrupt();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
producer("msg: ");
|
producer("msg: ");
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) { }
|
consumer.interrupt();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static final Runnable CONSUMER = () -> {
|
static final Runnable CONSUMER = () -> {
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < MSG_COUNT; i++) {
|
while(true) {
|
||||||
String s = QUEUE.take();
|
String s = QUEUE.take();
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@ -77,6 +74,7 @@ public class GetSetLocalTest {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public static void test1() throws Exception {
|
public static void test1() throws Exception {
|
||||||
|
QUEUE = new SynchronousQueue<>();
|
||||||
producer = Thread.ofVirtual().name("VThread-Producer").start(PRODUCER);
|
producer = Thread.ofVirtual().name("VThread-Producer").start(PRODUCER);
|
||||||
consumer = Thread.ofVirtual().name("VThread-Consumer").start(CONSUMER);
|
consumer = Thread.ofVirtual().name("VThread-Consumer").start(CONSUMER);
|
||||||
|
|
||||||
@ -101,6 +99,10 @@ public class GetSetLocalTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GetSetLocalTest obj = new GetSetLocalTest();
|
GetSetLocalTest obj = new GetSetLocalTest();
|
||||||
obj.runTest();
|
|
||||||
|
for (int i = 0; i < 200; i++) {
|
||||||
|
obj.runTest();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,7 +232,7 @@ test_GetLocal(jvmtiEnv *jvmti, JNIEnv *jni, jthread cthread, jthread vthread,
|
|||||||
|
|
||||||
static bool
|
static bool
|
||||||
test_SetLocal(jvmtiEnv *jvmti, JNIEnv *jni, jthread cthread, jthread vthread,
|
test_SetLocal(jvmtiEnv *jvmti, JNIEnv *jni, jthread cthread, jthread vthread,
|
||||||
int depth, int frame_count, Values *values) {
|
int depth, int frame_count, Values *values, bool at_event) {
|
||||||
jvmtiError err;
|
jvmtiError err;
|
||||||
|
|
||||||
LOG("test_SetLocal: mounted: %d depth: %d fcount: %d\n", cthread != NULL, depth, frame_count);
|
LOG("test_SetLocal: mounted: %d depth: %d fcount: %d\n", cthread != NULL, depth, frame_count);
|
||||||
@ -288,7 +288,7 @@ test_SetLocal(jvmtiEnv *jvmti, JNIEnv *jni, jthread cthread, jthread vthread,
|
|||||||
fatal(jni, "JVMTI SetLocalObject for unmounted vthread pr depth > 0failed to return JVMTI_ERROR_OPAQUE_FRAME");
|
fatal(jni, "JVMTI SetLocalObject for unmounted vthread pr depth > 0failed to return JVMTI_ERROR_OPAQUE_FRAME");
|
||||||
}
|
}
|
||||||
return false; // skip testing other types for unmounted vthread
|
return false; // skip testing other types for unmounted vthread
|
||||||
} else if (err == JVMTI_ERROR_OPAQUE_FRAME) {
|
} else if (!at_event && err == JVMTI_ERROR_OPAQUE_FRAME) {
|
||||||
LOG("JVMTI SetLocalObject for mounted vthread at depth=0 returned JVMTI_ERROR_OPAQUE_FRAME: %d\n", err);
|
LOG("JVMTI SetLocalObject for mounted vthread at depth=0 returned JVMTI_ERROR_OPAQUE_FRAME: %d\n", err);
|
||||||
return false; // skip testing other types for compiled frame that can't be deoptimized
|
return false; // skip testing other types for compiled frame that can't be deoptimized
|
||||||
}
|
}
|
||||||
@ -309,7 +309,7 @@ test_SetLocal(jvmtiEnv *jvmti, JNIEnv *jni, jthread cthread, jthread vthread,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_GetSetLocal(jvmtiEnv *jvmti, JNIEnv* jni, jthread vthread, int depth, int frame_count) {
|
test_GetSetLocal(jvmtiEnv *jvmti, JNIEnv* jni, jthread vthread, int depth, int frame_count, bool at_event) {
|
||||||
Values values0 = { NULL, NULL, 1, 2L, (jfloat)3.2F, (jdouble)4.500000047683716 };
|
Values values0 = { NULL, NULL, 1, 2L, (jfloat)3.2F, (jdouble)4.500000047683716 };
|
||||||
Values values1 = { NULL, NULL, 2, 3L, (jfloat)4.2F, (jdouble)5.500000047683716 };
|
Values values1 = { NULL, NULL, 2, 3L, (jfloat)4.2F, (jdouble)5.500000047683716 };
|
||||||
jthread cthread = get_carrier_thread(jvmti, jni, vthread);
|
jthread cthread = get_carrier_thread(jvmti, jni, vthread);
|
||||||
@ -319,8 +319,8 @@ test_GetSetLocal(jvmtiEnv *jvmti, JNIEnv* jni, jthread vthread, int depth, int f
|
|||||||
|
|
||||||
LOG("test_GetSetLocal: test_GetLocal with values0\n");
|
LOG("test_GetSetLocal: test_GetLocal with values0\n");
|
||||||
test_GetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values0);
|
test_GetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values0);
|
||||||
LOG("test_GetSetLocal: test_SetLocal with values1\n");
|
LOG("test_GetSetLocal: test_SetLocal at_event: %d with values1\n", at_event);
|
||||||
bool success = test_SetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values1);
|
bool success = test_SetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values1, at_event);
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
goto End; // skip testing for compiled frame that can't be deoptimized
|
goto End; // skip testing for compiled frame that can't be deoptimized
|
||||||
@ -334,8 +334,8 @@ test_GetSetLocal(jvmtiEnv *jvmti, JNIEnv* jni, jthread vthread, int depth, int f
|
|||||||
} else {
|
} else {
|
||||||
LOG("test_GetSetLocal: test_GetLocal with values1\n");
|
LOG("test_GetSetLocal: test_GetLocal with values1\n");
|
||||||
test_GetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values1);
|
test_GetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values1);
|
||||||
LOG("test_GetSetLocal: test_SetLocal with values0 to restore original local values\n");
|
LOG("test_GetSetLocal: test_SetLocal at_event: %d with values0 to restore original local values\n", at_event);
|
||||||
test_SetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values0);
|
test_SetLocal(jvmti, jni, cthread, vthread, depth, frame_count, &values0, at_event);
|
||||||
}
|
}
|
||||||
End:
|
End:
|
||||||
LOG("test_GetSetLocal: finished\n\n");
|
LOG("test_GetSetLocal: finished\n\n");
|
||||||
@ -360,7 +360,7 @@ Breakpoint(jvmtiEnv *jvmti, JNIEnv* jni, jthread vthread,
|
|||||||
|
|
||||||
{
|
{
|
||||||
int frame_count = get_frame_count(jvmti, jni, vthread);
|
int frame_count = get_frame_count(jvmti, jni, vthread);
|
||||||
test_GetSetLocal(jvmti, jni, vthread, depth, frame_count);
|
test_GetSetLocal(jvmti, jni, vthread, depth, frame_count, true /* at_event */);
|
||||||
}
|
}
|
||||||
deallocate(jvmti, jni, (void*)mname);
|
deallocate(jvmti, jni, (void*)mname);
|
||||||
deallocate(jvmti, jni, (void*)tname);
|
deallocate(jvmti, jni, (void*)tname);
|
||||||
@ -470,7 +470,7 @@ Java_GetSetLocalTest_testSuspendedVirtualThreads(JNIEnv *jni, jclass klass, jthr
|
|||||||
#if 0
|
#if 0
|
||||||
print_stack_trace(jvmti, jni, vthread);
|
print_stack_trace(jvmti, jni, vthread);
|
||||||
#endif
|
#endif
|
||||||
test_GetSetLocal(jvmti, jni, vthread, depth, frame_count);
|
test_GetSetLocal(jvmti, jni, vthread, depth, frame_count, false /* !at_event */);
|
||||||
}
|
}
|
||||||
|
|
||||||
err = jvmti->ResumeThread(vthread);
|
err = jvmti->ResumeThread(vthread);
|
||||||
@ -487,7 +487,11 @@ Java_GetSetLocalTest_testSuspendedVirtualThreads(JNIEnv *jni, jclass klass, jthr
|
|||||||
|
|
||||||
JNIEXPORT jboolean JNICALL
|
JNIEXPORT jboolean JNICALL
|
||||||
Java_GetSetLocalTest_completed(JNIEnv *jni, jclass klass) {
|
Java_GetSetLocalTest_completed(JNIEnv *jni, jclass klass) {
|
||||||
return completed;
|
if (completed) {
|
||||||
|
completed = JNI_FALSE;
|
||||||
|
return JNI_TRUE;
|
||||||
|
}
|
||||||
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -34,15 +34,20 @@ import javax.xml.parsers.DocumentBuilderFactory;
|
|||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.Listeners;
|
import org.testng.annotations.Listeners;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
import org.w3c.dom.Attr;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
|
||||||
import org.w3c.dom.events.Event;
|
import org.w3c.dom.events.Event;
|
||||||
import org.w3c.dom.events.EventListener;
|
import org.w3c.dom.events.EventListener;
|
||||||
|
import org.w3c.dom.ls.DOMImplementationLS;
|
||||||
|
import org.w3c.dom.ls.LSInput;
|
||||||
|
import org.w3c.dom.ls.LSParser;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8213117 8222743
|
* @bug 8213117 8222743 8287076
|
||||||
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
|
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
|
||||||
* @modules java.xml
|
* @modules java.xml
|
||||||
* @modules java.xml/com.sun.org.apache.xerces.internal.dom
|
* @modules java.xml/com.sun.org.apache.xerces.internal.dom
|
||||||
@ -56,6 +61,53 @@ public class DocumentTest {
|
|||||||
static final int DOC1 = 1;
|
static final int DOC1 = 1;
|
||||||
static final int DOC2 = 2;
|
static final int DOC2 = 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @bug 8287076
|
||||||
|
* Verifies that Document::normalizeDocument returns the same result as that
|
||||||
|
* prior to JDK 10 (JDK-8181150).
|
||||||
|
* Attribute Name:
|
||||||
|
* JDK 9: NS1:wsu and NS2:wsu2
|
||||||
|
* After the JDK 10 change: wsu and wsu2
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testNormalizeDocument() throws Exception {
|
||||||
|
final DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
|
||||||
|
final DOMImplementationLS impl = (DOMImplementationLS) registry.getDOMImplementation("LS");
|
||||||
|
final LSParser builder = impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
|
||||||
|
final LSInput input = impl.createLSInput();
|
||||||
|
input.setStringData("<xml/>");
|
||||||
|
final Document document = builder.parse(input);
|
||||||
|
final Element root = document.getDocumentElement();
|
||||||
|
|
||||||
|
// Generate a single element
|
||||||
|
final Element element = document.createElement("token");
|
||||||
|
final Attr attr = element.getOwnerDocument().createAttributeNS("http://blah.xsd", "wsu");
|
||||||
|
attr.setValue("Id");
|
||||||
|
element.setAttributeNodeNS(attr);
|
||||||
|
|
||||||
|
final Attr attr2 = element.getOwnerDocument().createAttributeNS("http://blah2.xsd", "wsu2");
|
||||||
|
element.setAttributeNodeNS(attr2);
|
||||||
|
|
||||||
|
final Attr attr3 = element.getOwnerDocument().createAttribute("aa");
|
||||||
|
element.setAttributeNodeNS(attr3);
|
||||||
|
|
||||||
|
final Attr attr4 = element.getOwnerDocument().createAttribute("zz");
|
||||||
|
element.setAttributeNodeNS(attr4);
|
||||||
|
|
||||||
|
final Attr attr5 = element.getOwnerDocument().createAttribute("tt");
|
||||||
|
element.setAttributeNodeNS(attr5);
|
||||||
|
|
||||||
|
root.appendChild(element);
|
||||||
|
|
||||||
|
document.normalizeDocument();
|
||||||
|
|
||||||
|
Node wsu = element.getAttributes().getNamedItemNS("http://blah.xsd", "wsu");
|
||||||
|
Node wsu2 = element.getAttributes().getNamedItemNS("http://blah2.xsd", "wsu2");
|
||||||
|
|
||||||
|
Assert.assertEquals(wsu.getNodeName(), "NS1:wsu");
|
||||||
|
Assert.assertEquals(wsu2.getNodeName(), "NS2:wsu2");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies the adoptNode method. Before a node from a deferred DOM can be
|
* Verifies the adoptNode method. Before a node from a deferred DOM can be
|
||||||
* adopted, it needs to be fully expanded.
|
* adopted, it needs to be fully expanded.
|
||||||
|
@ -692,7 +692,6 @@ sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770 macosx-all
|
|||||||
|
|
||||||
# core_tools
|
# core_tools
|
||||||
|
|
||||||
tools/jlink/plugins/CompressorPluginTest.java 8247407 generic-all
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
|
@ -63,8 +63,6 @@ public class AttachTest {
|
|||||||
.executeTestJava(opts)
|
.executeTestJava(opts)
|
||||||
.outputTo(System.out)
|
.outputTo(System.out)
|
||||||
.errorTo(System.out);
|
.errorTo(System.out);
|
||||||
int exitValue = outputAnalyzer.getExitValue();
|
outputAnalyzer.shouldHaveExitValue(0);
|
||||||
if (exitValue != 0)
|
|
||||||
throw new RuntimeException("Test failed");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ public class ImplicitAttach {
|
|||||||
.findStatic(ImplicitAttach.class, "callback", MethodType.methodType(void.class));
|
.findStatic(ImplicitAttach.class, "callback", MethodType.methodType(void.class));
|
||||||
MemorySegment upcallStub = abi.upcallStub(callback,
|
MemorySegment upcallStub = abi.upcallStub(callback,
|
||||||
FunctionDescriptor.ofVoid(),
|
FunctionDescriptor.ofVoid(),
|
||||||
MemorySession.openImplicit());
|
MemorySession.global());
|
||||||
|
|
||||||
// void start_threads(int count, void *(*f)(void *))
|
// void start_threads(int count, void *(*f)(void *))
|
||||||
SymbolLookup symbolLookup = SymbolLookup.loaderLookup();
|
SymbolLookup symbolLookup = SymbolLookup.loaderLookup();
|
||||||
|
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import jdk.internal.jimage.ImageReader;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 8247407
|
||||||
|
* @summary Test that ImageReader doesn't create a Directory node with duplicate children
|
||||||
|
* @modules java.base/jdk.internal.jimage
|
||||||
|
* @run main ImageReaderDuplicateChildNodesTest
|
||||||
|
*/
|
||||||
|
public class ImageReaderDuplicateChildNodesTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses the ImageReader to open and read the JAVA_HOME/lib/modules image. Tests that the
|
||||||
|
* {@link ImageReader#findNode(String)} corresponding to a directory doesn't return a node
|
||||||
|
* with duplicate children in it.
|
||||||
|
*/
|
||||||
|
public static void main(final String[] args) throws Exception {
|
||||||
|
final Path imagePath = Paths.get(System.getProperty("java.home"), "lib", "modules");
|
||||||
|
if (!Files.exists(imagePath)) {
|
||||||
|
// skip the testing in the absence of the image file
|
||||||
|
System.err.println("Skipping test since " + imagePath + " is absent");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println("Running test against image " + imagePath);
|
||||||
|
final String integersParentResource = "/modules/java.base/java/lang";
|
||||||
|
final String integerResource = integersParentResource + "/Integer.class";
|
||||||
|
try (final ImageReader reader = ImageReader.open(imagePath)) {
|
||||||
|
// find the child node/resource first
|
||||||
|
final ImageReader.Node integerNode = reader.findNode(integerResource);
|
||||||
|
if (integerNode == null) {
|
||||||
|
throw new RuntimeException("ImageReader could not locate " + integerResource
|
||||||
|
+ " in " + imagePath);
|
||||||
|
}
|
||||||
|
// now find the parent node (which will represent a directory)
|
||||||
|
final ImageReader.Node parent = reader.findNode(integersParentResource);
|
||||||
|
if (parent == null) {
|
||||||
|
throw new RuntimeException("ImageReader could not locate " + integersParentResource
|
||||||
|
+ " in " + imagePath);
|
||||||
|
}
|
||||||
|
// now verify that the parent node which is a directory, doesn't have duplicate children
|
||||||
|
final List<ImageReader.Node> children = parent.getChildren();
|
||||||
|
if (children == null || children.isEmpty()) {
|
||||||
|
throw new RuntimeException("ImageReader did not return any child resources under "
|
||||||
|
+ integersParentResource + " in " + imagePath);
|
||||||
|
}
|
||||||
|
final Set<ImageReader.Node> uniqueChildren = new HashSet<>();
|
||||||
|
for (final ImageReader.Node child : children) {
|
||||||
|
final boolean unique = uniqueChildren.add(child);
|
||||||
|
if (!unique) {
|
||||||
|
throw new RuntimeException("ImageReader returned duplicate child resource "
|
||||||
|
+ child + " under " + parent + " from image " + imagePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
47
test/langtools/tools/javac/patterns/ProxyMethodLookup.java
Normal file
47
test/langtools/tools/javac/patterns/ProxyMethodLookup.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 8288120
|
||||||
|
* @summary Verify an appropriate accessor method is looked up.
|
||||||
|
* @compile --enable-preview -source ${jdk.version} ProxyMethodLookup.java
|
||||||
|
* @run main/othervm --enable-preview ProxyMethodLookup
|
||||||
|
*/
|
||||||
|
public class ProxyMethodLookup {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Object val = new R(new Component());
|
||||||
|
boolean b = val instanceof R(var c);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ComponentBase {}
|
||||||
|
|
||||||
|
record Component() implements ComponentBase {}
|
||||||
|
|
||||||
|
sealed interface Base {
|
||||||
|
ComponentBase c();
|
||||||
|
}
|
||||||
|
|
||||||
|
record R(Component c) implements Base {}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user