From 63ed21e19438f667b53e2ce1f5c123f80b3ee26c Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sun, 5 Feb 2017 20:10:26 -0500 Subject: [PATCH] Bug 511726 - Handle unresolved field owner type in CPPASTFieldReference.getFieldPosition() Change-Id: I0ded6f44f8aad69d54c361432afcb423ed6601b2 --- .../cdt/internal/core/dom/parser/CompositeValue.java | 6 ++++++ .../internal/core/dom/parser/cpp/CPPASTFieldReference.java | 3 +++ 2 files changed, 9 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CompositeValue.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CompositeValue.java index 3bb2101f05f..3ba28287886 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CompositeValue.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/CompositeValue.java @@ -205,6 +205,9 @@ public final class CompositeValue implements IValue { IValue compValue = CompositeValue.create(baseClassType); for (ICPPField baseField : baseFields) { int fieldPos = CPPASTFieldReference.getFieldPosition(baseField); + if (fieldPos == -1) { + continue; + } record.update(baseField, compValue.getSubValue(fieldPos)); // TODO(nathanridge): This won't work with multiple inheritance, since 'fieldPos' // is a field position in the base class' hierarchy, while values[] expects @@ -220,6 +223,9 @@ public final class CompositeValue implements IValue { continue; final ICPPEvaluation value = EvalUtil.getVariableValue(field, record); int fieldPos = CPPASTFieldReference.getFieldPosition(field); + if (fieldPos == -1) { + continue; + } record.update(field, value); values[fieldPos] = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java index abc62e673f4..ab5c84b8b11 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java @@ -322,6 +322,9 @@ public class CPPASTFieldReference extends ASTNode public static int getFieldPosition(ICPPField field) { final ICPPClassType ownerType = field.getClassOwner(); + if (ownerType == null) { + return -1; + } final ICPPClassType[] baseClasses = ClassTypeHelper.getAllBases(ownerType, null); int baseFields = 0; for (ICPPClassType baseClass : baseClasses) {