From d55331cf8e1bfa5d5efb915bafc8cde7743ede88 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 19 Jan 2009 00:48:36 +0000 Subject: [PATCH] Bug 261417. Fix and test case. --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 11 +++++------ .../core/dom/parser/cpp/semantics/SemanticUtil.java | 12 ++++++++---- 2 files changed, 13 insertions(+), 10 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 6e658c1366b..c4f8509597b 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 @@ -2263,13 +2263,12 @@ public class AST2Tests extends AST2BaseTest { // void test(int a[]) { // func(&a); // } - public void _testArrayPointer_261417() throws Exception { - final boolean[] isCpps= {false, true}; + public void testArrayPointer_261417() throws Exception { String code= getAboveComment(); - for (boolean isCpp : isCpps) { - BindingAssertionHelper ba= new BindingAssertionHelper(code, isCpp); - ba.assertNonProblem("func(&a)", 4, ICPPFunction.class); - } + BindingAssertionHelper baC= new BindingAssertionHelper(code, false); + baC.assertNonProblem("func(&a)", 4, IFunction.class); + BindingAssertionHelper baCpp= new BindingAssertionHelper(code, true); + baCpp.assertNonProblem("func(&a)", 4, ICPPFunction.class); } // int f() {} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java index 5d2d0e45ee4..bfbac1ad8f0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java @@ -162,10 +162,10 @@ public class SemanticUtil { } /** - * Descends into type containers, stopping at pointer-to-member types if - * specified. + * Descends into type containers, stopping at pointer-to-member types if specified. * @param type the root type - * @param lastPointerType if non-null, the deepest pointer type encounter is stored in element zero + * @param lastPointerType if non-null, the deepest pointer or array type encountered + * is stored in element zero. * @param stopAtPointerToMember if true, do not descend into ICPPPointerToMember types * @return the deepest type in a type container sequence */ @@ -186,12 +186,16 @@ public class SemanticUtil { lastPointerType[0]= type; } type= ((IPointerType) type).getType(); + } else if (type instanceof IArrayType) { + if (lastPointerType != null) { + lastPointerType[0]= type; + } + type= ((IArrayType) type).getType(); } else if (type instanceof ICPPReferenceType) { type= ((ICPPReferenceType) type).getType(); } else { return type; } - } } catch (DOMException e) { return e.getProblem();