Skip to content
Snippets Groups Projects
Commit b4ac6b59 authored by Zbynek Slajchrt's avatar Zbynek Slajchrt
Browse files

The rbdiag tool exists with a non-zero status if a cast-pipeline related...

The rbdiag tool exists with a non-zero status if a cast-pipeline related warning is issued during validation of a builtin
parent 2eec4feb
No related branches found
No related tags found
No related merge requests found
......@@ -148,7 +148,7 @@ rbcheck : ${common} {
run : [
${gateCmd} ["Versions,JDKReleaseInfo,BuildJavaWithJavac"]
["mx", "rbcheck"]
["mx", "rbdiag", "-n", "-m"]
["mx", "rbdiag"]
]
}
......
......@@ -236,7 +236,7 @@ class ChimneySweeping extends SingleBuiltinDiagnostics {
}
@Override
public void diagnoseBuiltin() throws Exception {
public boolean diagnoseBuiltin() throws Exception {
// super.diagnoseBuiltin();
if (blacklistedBuiltins.contains(builtinName)) {
......@@ -244,10 +244,12 @@ class ChimneySweeping extends SingleBuiltinDiagnostics {
} else {
sweepChimney();
}
return true;
}
@Override
protected void diagnosePipeline(int i) {
protected boolean diagnosePipeline(int i) {
super.diagnosePipeline(i);
print(1, " Samples:");
......@@ -256,6 +258,8 @@ class ChimneySweeping extends SingleBuiltinDiagnostics {
if (diagSuite.diagConfig.performPipelineSelfTest) {
checkPipelines(i);
}
return true;
}
@SuppressWarnings({"rawtypes", "unchecked"})
......
......@@ -145,12 +145,13 @@ public class RBuiltinDiagnostics {
boolean ok = true;
try {
diag.init().diagnoseBuiltin();
ok = diag.init().diagnoseBuiltin();
print(1, "Finished");
print(1, "--------");
} catch (WarningException e) {
diag.print(0, "Warning: " + e.getMessage());
ok = false;
} catch (InfoException e) {
print(0, e.getMessage());
} catch (Throwable e) {
......@@ -178,6 +179,7 @@ public class RBuiltinDiagnostics {
diag = createBuiltinDiagnostics(new RIntBuiltinDiagFactory((bf)));
} catch (WarningException e) {
print(0, "Warning: " + e.getMessage());
ok = false;
continue;
} catch (InfoException e) {
print(1, e.getMessage());
......@@ -186,12 +188,14 @@ public class RBuiltinDiagnostics {
errCounter++;
print(0, "Error in initialization of builtin " + bf.getName());
t.printStackTrace();
ok = false;
continue;
}
try {
diag.init().diagnoseBuiltin();
ok &= diag.init().diagnoseBuiltin();
} catch (WarningException e) {
diag.print(0, "Warning: " + e.getMessage());
ok = false;
} catch (InfoException e) {
diag.print(1, e.getMessage());
} catch (Throwable t) {
......@@ -209,6 +213,7 @@ public class RBuiltinDiagnostics {
diag = createBuiltinDiagnostics(RExtBuiltinDiagFactory.create(extBltCls));
} catch (WarningException e) {
print(0, "Warning: " + e.getMessage());
ok = false;
continue;
} catch (InfoException e) {
print(1, e.getMessage());
......@@ -217,12 +222,14 @@ public class RBuiltinDiagnostics {
errCounter++;
print(0, "Error in initialization of " + extBltCls.getName() + " builtin");
t.printStackTrace();
ok = false;
continue;
}
try {
diag.init().diagnoseBuiltin();
ok &= diag.init().diagnoseBuiltin();
} catch (WarningException e) {
diag.print(0, "Warning: " + e.getMessage());
ok = false;
} catch (InfoException e) {
diag.print(1, e.getMessage());
} catch (Throwable t) {
......@@ -230,6 +237,7 @@ public class RBuiltinDiagnostics {
ok = false;
diag.print(0, "");
t.printStackTrace();
ok = false;
}
}
......@@ -422,15 +430,19 @@ public class RBuiltinDiagnostics {
return nonCovered;
}
public void diagnoseBuiltin() throws Exception {
public boolean diagnoseBuiltin() throws Exception {
boolean ok = true;
print(1, "Argument cast pipelines binding:");
for (int i = 0; i < argLength; i++) {
diagnosePipeline(i);
ok &= diagnosePipeline(i);
}
print(1, "\nUnhandled argument combinations: " + nonCoveredArgsSet.size());
print(1, "");
nonCoveredArgsSet.isEmpty();
if (diagSuite.diagConfig.verbose) {
for (List<Type> uncoveredArgs : nonCoveredArgsSet) {
print(1, uncoveredArgs.stream().map(t -> typeName(t)).collect(Collectors.toList()));
......@@ -438,7 +450,9 @@ public class RBuiltinDiagnostics {
}
print(1, "");
printDeadSpecs();
ok &= printDeadSpecs();
return ok;
}
private void printBuiltinHeader(int level) {
......@@ -452,7 +466,8 @@ public class RBuiltinDiagnostics {
}
}
private void printDeadSpecs() {
private boolean printDeadSpecs() {
boolean ok = true;
StringBuilder sb = new StringBuilder();
int deadSpecCnt = 0;
for (Map.Entry<Method, List<Set<Cast>>> resTpPerSpec : convResultTypePerSpec.entrySet()) {
......@@ -471,13 +486,19 @@ public class RBuiltinDiagnostics {
}
}
ok = deadSpecCnt == 0;
int logLev = deadSpecCnt == 0 ? 1 : 0;
String msg = deadSpecCnt == 0 ? "Dead specializations: " + deadSpecCnt : "Warning: Dead specializations: " + deadSpecCnt;
print(logLev, msg);
print(logLev, sb.toString());
return ok;
}
protected void diagnosePipeline(int i) {
protected boolean diagnosePipeline(int i) {
boolean ok = true;
TypeExpr argResultSet = argResultSets.get(i);
String pipelineHeader = "Pipeline for '" + parameterNames[i] + "' (arg[" + i + "])";
......@@ -501,11 +522,13 @@ public class RBuiltinDiagnostics {
if (unboundArgTypes.isEmpty()) {
print(1, pipelineHeader);
} else {
ok = false;
print(0, "Warning: " + pipelineHeader);
print(0, " Unbound types: " + unboundArgTypes.stream().map(argType -> typeName(argType)).collect(Collectors.toSet()));
}
print(1, sb.toString());
return ok;
}
private List<TypeExpr> createArgResultSets() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment