From dc62eb218dc16e5a422b6a343b42003bba78067f Mon Sep 17 00:00:00 2001 From: Hannes Vogt Date: Thu, 23 May 2019 08:49:16 +0200 Subject: Bug 547534 - Resolve TDEF in getFieldPosition() and propagate a ProblemType in EvalCompositeAccess. Change-Id: I20c580c681ea5916d2e1c249b96f41c9dc95082f Signed-off-by: Hannes Vogt --- .../eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java | 3 ++- .../internal/core/dom/parser/cpp/semantics/EvalCompositeAccess.java | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'core') 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 89d24112b7c..35c35b6479f 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 @@ -19,6 +19,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.LVALUE; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.ALLCVQ; +import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; import java.util.ArrayList; import java.util.Arrays; @@ -353,7 +354,7 @@ public class CPPASTFieldReference extends ASTNode } public static int getFieldPosition(IBinding binding, IType ownerType) { - final IType nestedType = SemanticUtil.getNestedType(ownerType, ALLCVQ); + final IType nestedType = SemanticUtil.getNestedType(ownerType, ALLCVQ | TDEF); if (nestedType instanceof ICPPClassType && binding instanceof ICPPField) { final ICPPField field = (ICPPField) binding; return getFieldPosition(field); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompositeAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompositeAccess.java index f19ee155716..7adf5900108 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompositeAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompositeAccess.java @@ -19,6 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory; import org.eclipse.cdt.core.dom.ast.IArrayType; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IField; +import org.eclipse.cdt.core.dom.ast.IProblemType; import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IValue; @@ -119,6 +120,8 @@ public final class EvalCompositeAccess implements ICPPEvaluation { return parameterPackType.getTypes()[elementId]; } else if (type instanceof ICPPBasicType) { return type; + } else if (type instanceof IProblemType) { + return type; } return null; } -- cgit v1.2.3