From 44b6373985dc874b8055f6b1d653b72a9e32295a Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Sun, 12 Oct 2008 23:48:35 +0000 Subject: [PATCH] Bug 245068. --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 16 ++++++++++++++++ .../dom/parser/cpp/semantics/CPPVisitor.java | 8 ++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 53beaf50769..4f7179838f4 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -6119,6 +6119,22 @@ public class AST2CPPTests extends AST2BaseTest { assertSame(ors[0], m1); } + // struct A { + // int a; + // }; + // + // void test(A* p) { + // p.a; // should not resolve + // } + public void testPointerMemberAccess_245068() throws Exception { + final String comment= getAboveComment(); + final boolean[] isCpps= {false, true}; + for (boolean isCpp : isCpps) { + BindingAssertionHelper ba= new BindingAssertionHelper(comment, isCpp); + ba.assertProblem("a; // should not resolve", 1); + } + } + // void f(); // // void test(int p) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 07ca9339ed2..edf968bfa7e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -925,7 +925,11 @@ public class CPPVisitor { } else if (parent instanceof ICPPASTFieldReference) { final ICPPASTFieldReference fieldReference = (ICPPASTFieldReference)parent; IType type = CPPSemantics.getChainedMemberAccessOperatorReturnType(fieldReference); - type= getUltimateType(type, false); + if (fieldReference.isPointerDereference()) { + type= getUltimateType(type, false); + } else { + type= getUltimateTypeUptoPointers(type); + } if (type instanceof ICPPClassType) { return ((ICPPClassType) type).getCompositeScope(); } @@ -2385,7 +2389,7 @@ public class CPPVisitor { */ public static final IASTExpression reverseConstantPropagationLookup(IASTExpression e1) { try { - for(int i= 0; e1 instanceof IASTIdExpression && i < 8; i++) { + for (int i= 0; e1 instanceof IASTIdExpression && i < 8; i++) { IBinding b1= ((IASTIdExpression)e1).getName().resolveBinding(); if (b1 instanceof ICPPVariable) { ICPPVariable var= (ICPPVariable) b1;