|
52 | 52 | import java.util.List; |
53 | 53 | import java.util.ListIterator; |
54 | 54 | import java.util.Map; |
| 55 | +import java.util.Random; |
55 | 56 | import java.util.Set; |
56 | 57 | import java.util.concurrent.ConcurrentHashMap; |
57 | 58 | import java.util.function.Supplier; |
@@ -1075,10 +1076,13 @@ protected final InstalledCode getCode(final ResolvedJavaMethod installedCodeOwne |
1075 | 1076 | protected InstalledCode getCode(final ResolvedJavaMethod installedCodeOwner, StructuredGraph graph, boolean forceCompile, boolean installAsDefault, OptionValues options) { |
1076 | 1077 | boolean useCache = !forceCompile && getArgumentToBind() == null; |
1077 | 1078 | if (useCache && graph == null) { |
1078 | | - InstalledCode cached = cache.get().get(installedCodeOwner); |
| 1079 | + HashMap<ResolvedJavaMethod, InstalledCode> tlCache = cache.get(); |
| 1080 | + InstalledCode cached = tlCache.get(installedCodeOwner); |
1079 | 1081 | if (cached != null) { |
1080 | 1082 | if (cached.isValid()) { |
1081 | 1083 | return cached; |
| 1084 | + } else { |
| 1085 | + tlCache.remove(installedCodeOwner); |
1082 | 1086 | } |
1083 | 1087 | } |
1084 | 1088 | } |
@@ -1671,4 +1675,35 @@ protected boolean isArchitecture(String name) { |
1671 | 1675 | protected CanonicalizerPhase createCanonicalizerPhase() { |
1672 | 1676 | return CanonicalizerPhase.create(); |
1673 | 1677 | } |
| 1678 | + |
| 1679 | + /** |
| 1680 | + * Defines property name for seed value. |
| 1681 | + */ |
| 1682 | + public static final String SEED_PROPERTY_NAME = "test.graal.random.seed"; |
| 1683 | + |
| 1684 | + /** |
| 1685 | + * Globally shared, lazily initialized random generator. |
| 1686 | + */ |
| 1687 | + private static volatile Random randomGenerator; |
| 1688 | + |
| 1689 | + /** |
| 1690 | + * Returns a global {@link java.util.Random} generator. The generator is seeded with the value |
| 1691 | + * specified by {@link #SEED_PROPERTY_NAME} if it exists. |
| 1692 | + * |
| 1693 | + * The used seed printed to stdout for reproducing test failures. |
| 1694 | + */ |
| 1695 | + public static Random getRandomInstance() { |
| 1696 | + if (randomGenerator == null) { |
| 1697 | + synchronized (GraalCompilerTest.class) { |
| 1698 | + if (randomGenerator == null) { |
| 1699 | + var seedLong = Long.getLong(SEED_PROPERTY_NAME); |
| 1700 | + var seed = seedLong != null ? seedLong : new Random().nextLong(); |
| 1701 | + System.out.printf("Random generator seed: %d%n", seed); |
| 1702 | + System.out.printf("To re-run test with same seed, set \"-D%s=%d\" on command line.%n", SEED_PROPERTY_NAME, seed); |
| 1703 | + randomGenerator = new Random(seed); |
| 1704 | + } |
| 1705 | + } |
| 1706 | + } |
| 1707 | + return randomGenerator; |
| 1708 | + } |
1674 | 1709 | } |
0 commit comments