diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index 8a9675c606a..41f594e0527 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -7704,4 +7704,16 @@ public class AST2Tests extends AST2TestBase { IASTConditionalExpression expr = helper.assertNode("cond ? arr1 : arr2"); assertSameType(expr.getExpressionType(), CommonCTypes.pointerToInt); } + + // struct S { + // int waldo; + // }; + // int main() { + // struct S* s; + // s.waldo; + // } + public void testMemberAccessOnPointerType_526857() throws Exception { + BindingAssertionHelper helper = getAssertionHelper(C); + helper.assertProblem("s.waldo", "waldo"); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java index b582c2e4bb0..30e97d86faf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java @@ -604,8 +604,16 @@ public class CVisitor extends ASTQueries { if (fieldOwner == null) return null; + boolean isPointerDeref = fieldReference.isPointerDereference(); IType type = fieldOwner.getExpressionType(); while (type != null && type instanceof ITypeContainer) { + if (type instanceof IPointerType) { + if (isPointerDeref) { + isPointerDeref = false; + } else { + return null; + } + } type = ((ITypeContainer) type).getType(); } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests_PlainC.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests_PlainC.java index ba2995fbd06..57411a3db20 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests_PlainC.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests_PlainC.java @@ -591,7 +591,7 @@ public class CompletionTests_PlainC extends AbstractContentAssistTest { //#define STRUCT_C1 ///*include*/ - //void gfunc() {gfC1().m/*cursor*/ + //void gfunc() {gfC1()->m/*cursor*/ public void testGlobalFunction() throws Exception { final String[] expected= { "m123", "m12", "m13"