From f94817bc73a8d3294622e121bf52dd8adde307ab Mon Sep 17 00:00:00 2001 From: Suzanne Millstein Date: Fri, 26 Jul 2024 13:50:38 -0700 Subject: [PATCH] More informative exception in callTransferFunction --- .../framework/flow/CFAbstractAnalysis.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/framework/src/main/java/org/checkerframework/framework/flow/CFAbstractAnalysis.java b/framework/src/main/java/org/checkerframework/framework/flow/CFAbstractAnalysis.java index 5dc7ff22ab7..63d50cc251e 100644 --- a/framework/src/main/java/org/checkerframework/framework/flow/CFAbstractAnalysis.java +++ b/framework/src/main/java/org/checkerframework/framework/flow/CFAbstractAnalysis.java @@ -10,7 +10,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.common.basetype.BaseTypeChecker; import org.checkerframework.dataflow.analysis.ForwardAnalysisImpl; +import org.checkerframework.dataflow.analysis.TransferInput; +import org.checkerframework.dataflow.analysis.TransferResult; import org.checkerframework.dataflow.cfg.ControlFlowGraph; +import org.checkerframework.dataflow.cfg.node.Node; import org.checkerframework.dataflow.expression.FieldAccess; import org.checkerframework.framework.source.SourceChecker; import org.checkerframework.framework.type.AnnotatedTypeFactory; @@ -22,6 +25,7 @@ import org.checkerframework.framework.type.TypeHierarchy; import org.checkerframework.framework.util.dependenttypes.DependentTypesHelper; import org.checkerframework.javacutil.AnnotationMirrorSet; +import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.TypesUtils; /** @@ -231,6 +235,17 @@ public TypeHierarchy getTypeHierarchy() { return atypeFactory; } + @Override + protected TransferResult callTransferFunction(Node node, TransferInput input) { + TransferResult result; + try { + result = super.callTransferFunction(node, input); + } catch (Throwable t) { + throw new BugInCF(node.getTree(), t); + } + return result; + } + /** * Returns an abstract value containing an annotated type with the annotation {@code anno}, and * 'top' for all other hierarchies. The underlying type is {@code underlyingType}.