# HG changeset patch # User twisti # Date 1394653245 25200 # Node ID 8c4a3d9308a7c9bee2fb1e5a8f34a37a3d36dab1 # Parent 7668297a2e6702b223c2922655a44713e7acc6dd fixed FindBugs bugs diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java Wed Mar 12 12:40:45 2014 -0700 @@ -197,8 +197,8 @@ @Override public boolean equals(Object obj) { - if (obj instanceof ConcreteMethod) { - ConcreteMethod other = (ConcreteMethod) obj; + if (obj instanceof MethodContents) { + MethodContents other = (MethodContents) obj; return other.method == method; } return false; @@ -387,7 +387,7 @@ } } - out.printf("%d assumptions:\n", nonNullList.size()); + out.printf("%d assumptions:%n", nonNullList.size()); for (Assumption a : nonNullList) { out.println(a.toString()); } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/DebugInfo.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/DebugInfo.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/DebugInfo.java Wed Mar 12 12:40:45 2014 -0700 @@ -22,8 +22,6 @@ */ package com.oracle.graal.api.code; -import java.io.*; - /** * Represents the debugging information for a particular point of execution. This information * includes: @@ -35,9 +33,7 @@ *
  • a map from the registers (in the caller's frame) to the slots where they are saved in the * current frame
  • */ -public class DebugInfo implements Serializable { - - private static final long serialVersionUID = -6047206624915812516L; +public class DebugInfo { private final BytecodePosition bytecodePosition; private final ReferenceMap referenceMap; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java Wed Mar 12 12:40:45 2014 -0700 @@ -22,16 +22,12 @@ */ package com.oracle.graal.api.code; -import java.io.*; - import com.oracle.graal.api.meta.*; /** * Represents a target machine register. */ -public final class Register implements Comparable, Serializable { - - private static final long serialVersionUID = -7213269157816016300L; +public final class Register implements Comparable { public static final RegisterCategory SPECIAL = new RegisterCategory("SPECIAL"); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Wed Mar 12 12:40:45 2014 -0700 @@ -87,7 +87,7 @@ } } else { ResolvedJavaField[] fields = vo.type.getInstanceFields(true); - assert fields.length == vo.values.length : vo.type + ", fields=" + Arrays.toString(fields) + ", values=" + vo.values; + assert fields.length == vo.values.length : vo.type + ", fields=" + Arrays.toString(fields) + ", values=" + Arrays.toString(vo.values); for (int i = 0; i < vo.values.length; i++) { if (i != 0) { buf.append(','); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AbstractJavaProfile.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AbstractJavaProfile.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AbstractJavaProfile.java Wed Mar 12 12:40:45 2014 -0700 @@ -43,7 +43,7 @@ public AbstractJavaProfile(double notRecordedProbability, T[] pitems) { this.pitems = pitems; - assert notRecordedProbability != Double.NaN; + assert !Double.isNaN(notRecordedProbability); this.notRecordedProbability = notRecordedProbability; assert isSorted(); } @@ -124,28 +124,26 @@ } @Override - public boolean equals(Object other) { - if (other == this) { + public boolean equals(Object obj) { + if (obj == this) { return true; } - if (getClass() == other.getClass()) { - AbstractJavaProfile javaTypeProfile = (AbstractJavaProfile) other; - if (javaTypeProfile.notRecordedProbability != notRecordedProbability) { + if (!(obj instanceof AbstractJavaProfile)) { + return false; + } + AbstractJavaProfile that = (AbstractJavaProfile) obj; + if (that.notRecordedProbability != notRecordedProbability) { + return false; + } + if (that.pitems.length != pitems.length) { + return false; + } + for (int i = 0; i < pitems.length; ++i) { + if (!pitems[i].equals(that.pitems[i])) { return false; } - if (javaTypeProfile.pitems.length != pitems.length) { - return false; - } - - for (int i = 0; i < pitems.length; ++i) { - if (!pitems[i].equals(javaTypeProfile.pitems[i])) { - return false; - } - } - - return true; } - return false; + return true; } @Override diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ExceptionHandler.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ExceptionHandler.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ExceptionHandler.java Wed Mar 12 12:40:45 2014 -0700 @@ -97,6 +97,9 @@ @Override public boolean equals(Object obj) { + if (!(obj instanceof ExceptionHandler)) { + return false; + } ExceptionHandler that = (ExceptionHandler) obj; if (this.startBCI != that.startBCI || this.endBCI != that.endBCI || this.handlerBCI != that.handlerBCI || this.catchTypeCPI != that.catchTypeCPI) { return false; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Wed Mar 12 12:40:45 2014 -0700 @@ -87,8 +87,8 @@ @Override public boolean equals(Object obj) { if (obj instanceof Value) { - Value other = (Value) obj; - return kind.equals(other.kind) && platformKind.equals(platformKind); + Value that = (Value) obj; + return kind.equals(that.kind) && platformKind.equals(that.platformKind); } return false; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.asm.ptx/src/com/oracle/graal/asm/ptx/PTXAssembler.java --- a/graal/com.oracle.graal.asm.ptx/src/com/oracle/graal/asm/ptx/PTXAssembler.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.asm.ptx/src/com/oracle/graal/asm/ptx/PTXAssembler.java Wed Mar 12 12:40:45 2014 -0700 @@ -698,9 +698,6 @@ @Override public void jmp(Label l) { String str = nameOf(l); - if (l.equals("?")) { - Thread.dumpStack(); - } bra(str); } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java Wed Mar 12 12:40:45 2014 -0700 @@ -413,8 +413,8 @@ Debug.log("splitting at position %d", optimalSplitPos); - assert allocator.isBlockBegin(optimalSplitPos) || (optimalSplitPos % 2 == 1) : "split pos must be odd when not on block boundary"; - assert !allocator.isBlockBegin(optimalSplitPos) || (optimalSplitPos % 2 == 0) : "split pos must be even on block boundary"; + assert allocator.isBlockBegin(optimalSplitPos) || ((optimalSplitPos & 1) == 1) : "split pos must be odd when not on block boundary"; + assert !allocator.isBlockBegin(optimalSplitPos) || ((optimalSplitPos & 1) == 0) : "split pos must be even on block boundary"; Interval splitPart = interval.split(optimalSplitPos, allocator); @@ -493,8 +493,8 @@ } try (Indent indent2 = Debug.logAndIndent("splitting at position %d", optimalSplitPos)) { - assert allocator.isBlockBegin(optimalSplitPos) || (optimalSplitPos % 2 == 1) : "split pos must be odd when not on block boundary"; - assert !allocator.isBlockBegin(optimalSplitPos) || (optimalSplitPos % 2 == 0) : "split pos must be even on block boundary"; + assert allocator.isBlockBegin(optimalSplitPos) || ((optimalSplitPos & 1) == 1) : "split pos must be odd when not on block boundary"; + assert !allocator.isBlockBegin(optimalSplitPos) || ((optimalSplitPos & 1) == 0) : "split pos must be even on block boundary"; Interval spilledPart = interval.split(optimalSplitPos, allocator); allocator.assignSpillSlot(spilledPart); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Wed Mar 12 12:40:45 2014 -0700 @@ -56,9 +56,6 @@ FrameState current = topState; do { for (EscapeObjectState state : current.virtualObjectMappings()) { - if (objectStates == null) { - objectStates = new IdentityHashMap<>(); - } if (!objectStates.containsKey(state.object())) { if (!(state instanceof MaterializedObjectState) || ((MaterializedObjectState) state).materializedValue() != state.object()) { objectStates.put(state.object(), state); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/DebugHistogramAsciiPrinter.java --- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/DebugHistogramAsciiPrinter.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/DebugHistogramAsciiPrinter.java Wed Mar 12 12:40:45 2014 -0700 @@ -62,7 +62,7 @@ public void print(DebugHistogram histogram) { List list = histogram.getValues(); if (list.isEmpty()) { - os.printf("%s is empty.\n", histogram.getName()); + os.printf("%s is empty.%n", histogram.getName()); return; } @@ -73,7 +73,7 @@ } // Print header. - os.printf("%s has %d unique elements and %d total elements:\n", histogram.getName(), list.size(), total); + os.printf("%s has %d unique elements and %d total elements:%n", histogram.getName(), list.size(), total); int max = list.get(0).getCount(); final int lineSize = nameSize + NumberSize + barSize + 10; @@ -96,6 +96,6 @@ private static void printLine(PrintStream printStream, char c, int lineSize) { char[] charArr = new char[lineSize]; Arrays.fill(charArr, c); - printStream.printf("%s\n", new String(charArr)); + printStream.printf("%s%n", new String(charArr)); } } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Mar 12 12:40:45 2014 -0700 @@ -535,18 +535,22 @@ } private void maybeNotifyChanged(Node usage) { - assert graph == null || !graph.isFrozen(); - NodeChangedListener listener = graph.inputChangedListener; - if (listener != null) { - listener.nodeChanged(usage); + if (graph != null) { + assert !graph.isFrozen(); + NodeChangedListener listener = graph.inputChangedListener; + if (listener != null) { + listener.nodeChanged(usage); + } } } private void maybeNotifyZeroInputs(Node oldInput) { - assert graph == null || !graph.isFrozen(); - NodeChangedListener listener = graph.usagesDroppedToZeroListener; - if (listener != null) { - listener.nodeChanged(oldInput); + if (graph != null) { + assert !graph.isFrozen(); + NodeChangedListener listener = graph.usagesDroppedToZeroListener; + if (listener != null) { + listener.nodeChanged(oldInput); + } } } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Wed Mar 12 12:40:45 2014 -0700 @@ -970,8 +970,8 @@ int index = startIndex; while (index < inputOffsets.length) { NodeList list = getNodeList(node, inputOffsets[index]); + assert list != null : clazz; putNodeList(node, inputOffsets[index], updateInputListCopy(list, node, duplicationReplacement)); - assert list != null : clazz; index++; } } @@ -980,8 +980,8 @@ int index = startIndex; while (index < successorOffsets.length) { NodeList list = getNodeList(node, successorOffsets[index]); + assert list != null : clazz; putNodeList(node, successorOffsets[index], updateSuccListCopy(list, node, duplicationReplacement)); - assert list != null : clazz; index++; } } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/ForEachToGraal.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/ForEachToGraal.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/ForEachToGraal.java Wed Mar 12 12:40:45 2014 -0700 @@ -82,13 +82,13 @@ NodeIterable calls = graph.getNodes(MethodCallTargetNode.class); assert calls.count() == 1; ResolvedJavaMethod lambdaMethod = calls.first().targetMethod(); - assert lambdaMethod.getName().startsWith("lambda$"); Debug.log("target ... " + lambdaMethod); if (lambdaMethod == null) { Debug.log("Did not find call in accept()"); return null; } + assert lambdaMethod.getName().startsWith("lambda$"); ExternalCompilationResult hsailCode = backend.compileKernel(lambdaMethod, true); return backend.installKernel(lambdaMethod, hsailCode); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Wed Mar 12 12:40:45 2014 -0700 @@ -184,7 +184,7 @@ private boolean canOffloadToGPU(ResolvedJavaMethod method) { HotSpotVMConfig config = getRuntime().getConfig(); - return config.gpuOffload && method.getName().contains("lambda$") & method.isSynthetic(); + return config.gpuOffload && method.getName().contains("lambda$") && method.isSynthetic(); } }; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Wed Mar 12 12:40:45 2014 -0700 @@ -51,6 +51,8 @@ import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + public class CompilationTask implements Runnable, Comparable { // Keep static finals in a group with withinEnqueue as the last one. CompilationTask can be @@ -125,6 +127,7 @@ return entryBCI; } + @SuppressFBWarnings(value = "NN_NAKED_NOTIFY") public void run() { withinEnqueue.set(Boolean.FALSE); try { diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Mar 12 12:40:45 2014 -0700 @@ -60,8 +60,19 @@ } HotSpotVMConfig(CompilerToVM compilerToVm) { + /** These fields are set in {@link CompilerToVM#initializeConfiguration}. */ + gHotSpotVMStructs = 0; + gHotSpotVMTypes = 0; + gHotSpotVMIntConstants = 0; + gHotSpotVMLongConstants = 0; + compilerToVm.initializeConfiguration(this); + assert gHotSpotVMStructs != 0; + assert gHotSpotVMTypes != 0; + assert gHotSpotVMIntConstants != 0; + assert gHotSpotVMLongConstants != 0; + // Fill the VM fields hash map. HashMap vmFields = new HashMap<>(); for (VMFields.Field e : new VMFields(gHotSpotVMStructs)) { diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Wed Mar 12 12:40:45 2014 -0700 @@ -45,6 +45,8 @@ import com.oracle.graal.options.*; import com.oracle.graal.replacements.nodes.*; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + /** * This class contains infrastructure to maintain counters based on {@link DynamicCounterNode}s. The * infrastructure is enabled by specifying either the GenericDynamicCounters or @@ -105,6 +107,7 @@ public static long[] delta; public static final ArrayList staticCounters = new ArrayList<>(); + @SuppressFBWarnings(value = "AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION", justification = "concurrent abstraction calls are in synchronized block") public static int getIndex(DynamicCounterNode counter) { if (!enabled) { throw new GraalInternalError("counter nodes shouldn't exist when counters are not enabled: " + counter.getGroup() + ", " + counter.getName()); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Wed Mar 12 12:40:45 2014 -0700 @@ -134,8 +134,8 @@ public static final LocationIdentity[] NO_LOCATIONS = {}; public HotSpotForeignCallLinkage lookupForeignCall(ForeignCallDescriptor descriptor) { + assert foreignCalls != null : descriptor; HotSpotForeignCallLinkage callTarget = foreignCalls.get(descriptor); - assert foreignCalls != null : descriptor; callTarget.finalizeAddress(runtime.getHostBackend()); return callTarget; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphCache.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphCache.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphCache.java Wed Mar 12 12:40:45 2014 -0700 @@ -34,6 +34,8 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + /** * This class implements the graph caching system for the HotSpot platform. * @@ -115,6 +117,7 @@ } @Override + @SuppressFBWarnings(value = "VO_VOLATILE_INCREMENT", justification = "counters are only used for statistics") public StructuredGraph get(ResolvedJavaMethod method) { StructuredGraph result = (StructuredGraph) method.getCompilerStorage().get(this); @@ -129,6 +132,7 @@ } @Override + @SuppressFBWarnings(value = "VO_VOLATILE_INCREMENT", justification = "counters are only used for statistics") public boolean put(StructuredGraph graph, boolean hasMatureProfilingInfo) { assert graph.method() != null; if (hasMatureProfilingInfo) { @@ -160,6 +164,7 @@ } } + @SuppressFBWarnings(value = "VO_VOLATILE_INCREMENT", justification = "counters are only used for statistics") public void removeGraphs(long[] deoptedGraphs) { for (long graphId : deoptedGraphs) { WeakReference ref = cachedGraphIds.get(graphId); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Mar 12 12:40:45 2014 -0700 @@ -120,8 +120,7 @@ HotSpotResolvedObjectType resolved = (HotSpotResolvedObjectType) holder; return resolved.createField(name, type, offset, modifiers); } else { - // TODO this cast will not succeed - return (ResolvedJavaField) new HotSpotUnresolvedField(holder, name, type); + throw GraalInternalError.shouldNotReachHere("unresolved field " + reflectionField); } } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Wed Mar 12 12:40:45 2014 -0700 @@ -84,7 +84,7 @@ @Override public String toString() { - return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b, name=]", method, getCodeBlob(), isDefault, name); + return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b, name=%s]", method, getCodeBlob(), isDefault, name); } @Override diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Mar 12 12:40:45 2014 -0700 @@ -70,7 +70,10 @@ @Override public ResolvedJavaType getArrayClass() { - Class javaArrayMirror = kind == Kind.Void ? null : Array.newInstance(mirror(), 0).getClass(); + if (kind == Kind.Void) { + return null; + } + Class javaArrayMirror = Array.newInstance(mirror(), 0).getClass(); return HotSpotResolvedObjectType.fromClass(javaArrayMirror); } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java --- a/graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java Wed Mar 12 12:40:45 2014 -0700 @@ -25,6 +25,7 @@ import java.io.*; import java.util.*; +import com.oracle.graal.graph.*; import com.oracle.graal.java.decompiler.block.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; @@ -55,9 +56,9 @@ schedule = new SchedulePhase(); schedule.apply(graph); } catch (Throwable t) { + throw new GraalInternalError(t); } } - cfg = schedule.getCFG(); } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Wed Mar 12 12:40:45 2014 -0700 @@ -141,7 +141,7 @@ desc = constant.toString(); } if (!multiline) { - desc.replaceAll("\\n", ""); + desc = desc.replaceAll("\\n", ""); } buf.append(String.format("#%-10d // %s", cpi, desc)); break; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Wed Mar 12 12:40:45 2014 -0700 @@ -54,7 +54,7 @@ * @param y the instruction that produces the second input to this instruction */ public CompareNode(ValueNode x, ValueNode y) { - assert (x == null && y == null) || x.kind() == y.kind(); + assert x != null && y != null && x.kind() == y.kind(); this.x = x; this.y = y; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Wed Mar 12 12:40:45 2014 -0700 @@ -53,7 +53,7 @@ * @param y the instruction that produces the second input to this instruction */ public IntegerTestNode(ValueNode x, ValueNode y) { - assert (x == null && y == null) || x.stamp().isCompatible(y.stamp()); + assert x != null && y != null && x.stamp().isCompatible(y.stamp()); this.x = x; this.y = y; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Mar 12 12:40:45 2014 -0700 @@ -76,7 +76,7 @@ } if (tool.canonicalizeReads()) { if (metaAccess != null && object != null && object.isConstant()) { - if ((location.getLocationIdentity() == LocationIdentity.FINAL_LOCATION || location.getLocationIdentity() == LocationIdentity.ARRAY_LENGTH_LOCATION) & + if ((location.getLocationIdentity() == LocationIdentity.FINAL_LOCATION || location.getLocationIdentity() == LocationIdentity.ARRAY_LENGTH_LOCATION) && location instanceof ConstantLocationNode) { long displacement = ((ConstantLocationNode) location).getDisplacement(); Kind kind = location.getValueKind(); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java --- a/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java Wed Mar 12 12:40:45 2014 -0700 @@ -172,7 +172,7 @@ String declaringClass = option.declaringClass; Name fieldName = option.field.getSimpleName(); String comma = i == info.options.size() - 1 ? "" : ","; - out.printf(" new %s(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s)%s\n", desc, name, type, help, declaringClass, fieldName, optionValue, comma); + out.printf(" new %s(\"%s\", %s.class, \"%s\", %s.class, \"%s\", %s)%s%n", desc, name, type, help, declaringClass, fieldName, optionValue, comma); i++; } out.println(" );"); diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Wed Mar 12 12:40:45 2014 -0700 @@ -66,7 +66,7 @@ new ConditionalElimination(graph.start(), new State()).apply(); } - public static class State extends MergeableState { + public static class State extends MergeableState implements Cloneable { private IdentityHashMap knownTypes; private HashSet knownNonNull; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java Wed Mar 12 12:40:45 2014 -0700 @@ -37,7 +37,7 @@ */ public class ValueAnchorCleanupPhase extends Phase { - private static class State extends MergeableState { + private static class State extends MergeableState implements Cloneable { private final HashSet anchoredValues; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeProbabilityClosure.java Wed Mar 12 12:40:45 2014 -0700 @@ -169,7 +169,7 @@ public final NodeMap> requires; - private double loopFrequency = -1; + private double loopFrequency = -1.0; public boolean ended = false; public LoopInfo(LoopBeginNode loopBegin) { @@ -178,7 +178,8 @@ } public double loopFrequency(NodesToDoubles nodeProbabilities) { - if (loopFrequency == -1 && ended) { + // loopFrequency is initialized with -1.0 + if (loopFrequency < 0.0 && ended) { double backEdgeProb = 0.0; for (LoopEndNode le : loopBegin.loopEnds()) { double factor = 1; @@ -219,7 +220,7 @@ return r; } - private class Probability extends MergeableState { + private class Probability extends MergeableState implements Cloneable { public double probability; public Set loops; @@ -330,7 +331,7 @@ } } - private class LoopCount extends MergeableState { + private class LoopCount extends MergeableState implements Cloneable { public double count; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/MergeableState.java Wed Mar 12 12:40:45 2014 -0700 @@ -62,7 +62,7 @@ // empty default implementation } - public static final class EmptyState extends MergeableState { + public static final class EmptyState extends MergeableState implements Cloneable { @Override public EmptyState clone() { diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Wed Mar 12 12:40:45 2014 -0700 @@ -86,7 +86,7 @@ // This field must be lazily initialized as this class may be loaded in a version // VM startup phase at which not all required features (such as system properties) // are online. - private static SimpleDateFormat sdf; + private static volatile SimpleDateFormat sdf; private void initializeFilePrinter() { String ext; @@ -98,7 +98,13 @@ if (sdf == null) { sdf = new SimpleDateFormat("YYYY-MM-dd-HHmm"); } - String prefix = "Graphs-" + Thread.currentThread().getName() + "-" + sdf.format(new Date()); + + // DateFormats are inherently unsafe for multi-threaded use. Use a synchronized block. + String prefix; + synchronized (sdf) { + prefix = "Graphs-" + Thread.currentThread().getName() + "-" + sdf.format(new Date()); + } + String num = ""; File file; int i = 0; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StringSubstitutions.java Wed Mar 12 12:40:45 2014 -0700 @@ -30,6 +30,8 @@ import com.oracle.graal.graph.*; import com.oracle.graal.replacements.nodes.*; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + /** * Substitutions for {@link java.lang.String} methods. */ @@ -51,6 +53,7 @@ } @MethodSubstitution(isStatic = false) + @SuppressFBWarnings(value = "ES_COMPARING_PARAMETER_STRING_WITH_EQ", justification = "reference equality on the receiver is what we want") public static boolean equals(final String thisString, Object obj) { if (thisString == obj) { return true; diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleDebugJavaMethod.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleDebugJavaMethod.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleDebugJavaMethod.java Wed Mar 12 12:40:45 2014 -0700 @@ -59,7 +59,7 @@ @Override public boolean equals(Object obj) { - return obj.getClass() == getClass(); + return obj instanceof TruffleDebugJavaMethod; } @Override diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleExpansionLogger.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleExpansionLogger.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleExpansionLogger.java Wed Mar 12 12:40:45 2014 -0700 @@ -168,10 +168,10 @@ if (e.getLineNumber() >= 0) { return String.format("(%s:%d)", e.getFileName(), e.getLineNumber()); } else { - return String.format("(%s)", e.getFileName(), e.getLineNumber()); + return String.format("(%s)", e.getFileName()); } } else { - return String.format("(Unknown Source)", e.getFileName(), e.getLineNumber()); + return String.format("(Unknown Source)"); } } } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationBlockState.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationBlockState.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationBlockState.java Wed Mar 12 12:40:45 2014 -0700 @@ -50,6 +50,9 @@ @Override public boolean equals(Object obj) { + if (!(obj instanceof ReadCacheEntry)) { + return false; + } ReadCacheEntry other = (ReadCacheEntry) obj; return identity == other.identity && object == other.object; } diff -r 7668297a2e67 -r 8c4a3d9308a7 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java Wed Mar 12 13:36:23 2014 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java Wed Mar 12 12:40:45 2014 -0700 @@ -52,6 +52,9 @@ @Override public boolean equals(Object obj) { + if (!(obj instanceof CacheEntry)) { + return false; + } CacheEntry other = (CacheEntry) obj; return identity == other.identity && object == other.object; } diff -r 7668297a2e67 -r 8c4a3d9308a7 mx/projects --- a/mx/projects Wed Mar 12 13:36:23 2014 +0100 +++ b/mx/projects Wed Mar 12 12:40:45 2014 -0700 @@ -13,6 +13,9 @@ library@CHECKSTYLE@path=lib/checkstyle-5.5-all.jar library@CHECKSTYLE@urls=jar:http://sourceforge.net/projects/checkstyle/files/checkstyle/5.5/checkstyle-5.5-bin.zip/download!/checkstyle-5.5/checkstyle-5.5-all.jar +library@FINDBUGS@path=lib/findbugs-3.0.0-dev-20131204-e3cbbd5.jar +library@FINDBUGS@urls=jar:http://sourceforge.net/projects/findbugs/files/findbugs/3.0.0/findbugs-3.0.0-dev-20131204-e3cbbd5.zip/download!/findbugs-3.0.0-dev-20131204-e3cbbd5/lib/findbugs.jar + library@DACAPO@path=lib/dacapo-9.12-bach.jar library@DACAPO@urls=http://softlayer.dl.sourceforge.net/project/dacapobench/9.12-bach/dacapo-9.12-bach.jar @@ -230,7 +233,7 @@ # graal.graph project@com.oracle.graal.graph@subDir=graal project@com.oracle.graal.graph@sourceDirs=src -project@com.oracle.graal.graph@dependencies=com.oracle.graal.debug,com.oracle.graal.api.code +project@com.oracle.graal.graph@dependencies=FINDBUGS,com.oracle.graal.debug,com.oracle.graal.api.code project@com.oracle.graal.graph@javaCompliance=1.7 project@com.oracle.graal.graph@workingSets=Graal,Graph