From e54c6c45a7f39d0d4e3e765652b8f220f7c5be35 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 25 Apr 2008 13:19:13 +0000 Subject: [PATCH] Create problem bindings for non-existent fields, bug 228504. --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 31 ++++++++++++++++++- .../internal/core/dom/parser/c/CVisitor.java | 4 ++- 2 files changed, 33 insertions(+), 2 deletions(-) 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 5082d23cf0d..41c5bc53770 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 @@ -4636,7 +4636,6 @@ public class AST2Tests extends AST2BaseTest { parseAndCheckBindings(code, ParserLanguage.CPP); } - // int f(x) { // return 0; // } @@ -4644,4 +4643,34 @@ public class AST2Tests extends AST2BaseTest { StringBuffer buffer = getContents(1)[0]; parse(buffer.toString(), ParserLanguage.C, false ); } + + // struct { + // char foo; + // } myStruct, *myStructPointer; + // + // union { + // char foo; + // } myUnion, *myUnionPointer; + // + // void test() { + // myStruct.foo=1; + // myStructPointer->foo=2; + // myUnion.foo=3; + // myUnionPointer->foo=4; + // + // myStruct.bar=1; + // myStructPointer->bar=2; + // myUnion.bar=3; + // myUnionPointer->bar=4; + // } + public void testBug228504_nonExistingMembers() throws Exception { + boolean[] isCpps= {true, false}; + for (boolean isCpp : isCpps) { + BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), isCpp); + for (int i=1; i < 5; i++) { + ba.assertNonProblem("foo=" + i, 3); + ba.assertProblem("bar=" + i, 3); + } + } + } } 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 76f59a6b6b0..826e21db5f7 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 @@ -11,7 +11,6 @@ * Bryan Wilkinson (QNX) * Andrew Ferguson (Symbian) *******************************************************************************/ - package org.eclipse.cdt.internal.core.dom.parser.c; import java.util.ArrayList; @@ -490,6 +489,9 @@ public class CVisitor { binding = resolveBinding( parent ); } else if( parent instanceof IASTFieldReference ){ binding = (IBinding) findBinding( (IASTFieldReference) parent, false ); + if (binding == null) { + binding = new ProblemBinding(name, IProblemBinding.SEMANTIC_NAME_NOT_FOUND, name.toCharArray()); + } } else if( parent instanceof IASTDeclarator ){ binding = createBinding( (IASTDeclarator) parent, name ); } else if( parent instanceof ICASTCompositeTypeSpecifier ){