From 898ce2245bf8f29807624db3ee797e9606168205 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 16 Sep 2016 20:24:31 -0700 Subject: [PATCH] Bug 501623 - ClassCastException in EvalMemberAccess.getValue Change-Id: Ib9177f2bd2f9d9d005397b72d6d0274cb3e2605f --- .../parser/cpp/semantics/EvalMemberAccess.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index da95de5dd06..7701e251e33 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -23,8 +23,6 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getUltimateTypeUptoPointers; -import java.util.Collection; - import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; @@ -58,6 +56,8 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; +import java.util.Collection; + public class EvalMemberAccess extends CPPDependentEvaluation { private final IType fOwnerType; private final IBinding fMember; @@ -300,14 +300,18 @@ public class EvalMemberAccess extends CPPDependentEvaluation { public IValue getValue(IASTNode point) { if (fOwnerEval != null) { int fieldPos = CPPASTFieldReference.getFieldPosition(fMember, fOwnerType); - CompositeValue compValue = (CompositeValue) fOwnerEval.getValue(point); - ICPPEvaluation field = compValue.getSubValue(fieldPos); - if(field != null) { - return field.getValue(point); + IValue ownerValue = fOwnerEval.getValue(point); + if (ownerValue instanceof CompositeValue) { + CompositeValue compValue = (CompositeValue) ownerValue; + ICPPEvaluation field = compValue.getSubValue(fieldPos); + if (field != null) { + return field.getValue(point); + } } else { return IntegralValue.UNKNOWN; } } + if (fMember instanceof IEnumerator) { return ((IEnumerator) fMember).getValue(); }