From 9bf79183b4c842e7c6cbae71c939900aa5b74356 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 27 Jan 2009 18:25:52 +0000 Subject: [PATCH] Expression type for array-access on unknown binding. --- .../core/parser/tests/ast2/AST2TemplateTests.java | 14 ++++++++++++++ .../parser/cpp/CPPASTArraySubscriptExpression.java | 3 +++ 2 files changed, 17 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index d13c756f2ba..45804a0f76a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -3702,4 +3702,18 @@ public class AST2TemplateTests extends AST2BaseTest { String code= getAboveComment(); parseAndCheckBindings(code, ParserLanguage.CPP); } + + // class C {}; + // template class XT { + // T field; + // void bla() { + // C c; + // field[0].m(c); + // } + // }; + public void testResolutionOfUnknownArrayAccess() throws Exception { + String code= getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.CPP); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java index 65f356bf305..49ece3d6ad1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java @@ -120,6 +120,9 @@ public class CPPASTArraySubscriptExpression extends ASTNode implements IASTArray IType t = getArrayExpression().getExpressionType(); t= SemanticUtil.getUltimateTypeUptoPointers(t); try { + if (t instanceof ICPPUnknownType) { + return CPPUnknownClass.createUnnamedInstance(); + } if (t instanceof ICPPClassType) { ICPPFunction op = CPPSemantics.findOperator(this, (ICPPClassType) t); if (op != null) {