From ddae416bf6b91560516931442e72ca2860bd83da Mon Sep 17 00:00:00 2001 From: Tom Shull Date: Tue, 29 Oct 2024 17:17:25 +0100 Subject: [PATCH] Ensure World fields are saturated when unavailable. --- .../src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java | 5 ++++- .../com/oracle/svm/hosted/ameta/CustomTypeFieldHandler.java | 2 +- .../analysis/NativeImageReachabilityAnalysisEngine.java | 2 +- .../svm/hosted/analysis/PointsToCustomTypeFieldHandler.java | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java index 911b967b0acd..7a87802958e9 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageHeapScanner.java @@ -51,6 +51,7 @@ import com.oracle.graal.pointsto.meta.AnalysisMetaAccess; import com.oracle.graal.pointsto.meta.AnalysisType; import com.oracle.graal.pointsto.meta.AnalysisUniverse; +import com.oracle.graal.pointsto.meta.PointsToAnalysisField; import com.oracle.graal.pointsto.util.AnalysisError; import com.oracle.graal.pointsto.util.AnalysisFuture; import com.oracle.graal.pointsto.util.CompletionExecutor; @@ -139,8 +140,10 @@ public void onFieldRead(AnalysisField field) { * * GR-52421: the field state needs to be serialized from the base layer analysis */ - if (field.getJavaKind().isObject()) { + if (field.getStorageKind().isObject()) { bb.injectFieldTypes(field, List.of(field.getType()), true); + } else if (bb.trackPrimitiveValues() && field.getStorageKind().isPrimitive()) { + ((PointsToAnalysisField) field).saturatePrimitiveField(); } return; } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ameta/CustomTypeFieldHandler.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ameta/CustomTypeFieldHandler.java index 0242086c3892..282598f34716 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ameta/CustomTypeFieldHandler.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ameta/CustomTypeFieldHandler.java @@ -59,7 +59,7 @@ public void handleField(AnalysisField field) { */ assert field.isAccessed(); if (fieldValueInterceptionSupport.hasFieldValueTransformer(field)) { - if (field.getJavaKind().isObject() && !fieldValueInterceptionSupport.isValueAvailable(field)) { + if (field.getStorageKind().isObject() && !fieldValueInterceptionSupport.isValueAvailable(field)) { injectFieldTypes(field, List.of(field.getType()), true); } else if (bb.trackPrimitiveValues() && field.getStorageKind().isPrimitive() && field instanceof PointsToAnalysisField ptaField) { ptaField.saturatePrimitiveField(); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/NativeImageReachabilityAnalysisEngine.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/NativeImageReachabilityAnalysisEngine.java index 558e46592890..1c1d97808bf0 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/NativeImageReachabilityAnalysisEngine.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/NativeImageReachabilityAnalysisEngine.java @@ -61,7 +61,7 @@ public NativeImageReachabilityAnalysisEngine(OptionValues options, AnalysisUnive this.unknownFieldHandler = new CustomTypeFieldHandler(this, metaAccess) { @Override public void injectFieldTypes(AnalysisField aField, List declaredTypes, boolean canBeNull) { - assert aField.getJavaKind().isObject(); + assert aField.getStorageKind().isObject(); aField.registerAsAccessed("@UnknownObjectField annotated field."); for (AnalysisType declaredType : declaredTypes) { declaredType.registerAsReachable("injected field types for unknown annotated field " + aField.format("%H.%n")); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/PointsToCustomTypeFieldHandler.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/PointsToCustomTypeFieldHandler.java index df472fe169a2..ad25403cbed8 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/PointsToCustomTypeFieldHandler.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/PointsToCustomTypeFieldHandler.java @@ -46,7 +46,7 @@ public PointsToCustomTypeFieldHandler(BigBang bb, AnalysisMetaAccess metaAccess) public void injectFieldTypes(AnalysisField aField, List customTypes, boolean canBeNull) { NativeImagePointsToAnalysis analysis = (NativeImagePointsToAnalysis) bb; - assert aField.getJavaKind().isObject(); + assert aField.getStorageKind().isObject(); /* Link the field with all declared types. */ for (AnalysisType type : customTypes) {