Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java14
2 files changed, 25 insertions, 4 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
index 0e8fded9b54..57ffaefda0b 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
@@ -9,6 +9,7 @@
* Andrew Ferguson (Symbian) - Initial implementation
* Markus Schorn (Wind River Systems)
* Sergey Prigogin (Google)
+ * Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.internal.index.tests;
@@ -2175,4 +2176,18 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
public void testLambdaExpression_395884() throws Exception {
checkBindings();
}
+
+ // template <typename T> int bar(T);
+ // template <int N> struct S {
+ // template <typename T> auto foo(T t) const -> decltype(bar(t));
+ // };
+
+ // void f(int);
+ // void test() {
+ // S<1> n;
+ // f(n.foo(0));
+ // }
+ public void testDependentExpression_395875() throws Exception {
+ getBindingFromASTName("f(n.foo(0))", 1, ICPPFunction.class);
+ }
}
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 044de05a6bf..4970707fc4b 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
@@ -2435,13 +2435,19 @@ public class CPPVisitor extends ASTQueries {
* Searches for the function enclosing the given node. May return <code>null</code>.
*/
public static IBinding findEnclosingFunction(IASTNode node) {
- while (node != null && !(node instanceof IASTFunctionDefinition)) {
+ IASTDeclarator dtor = null;
+ while (node != null) {
+ if (node instanceof IASTFunctionDeclarator) {
+ dtor = (IASTDeclarator) node;
+ break;
+ }
+ if (node instanceof IASTFunctionDefinition) {
+ dtor= findInnermostDeclarator(((IASTFunctionDefinition) node).getDeclarator());
+ break;
+ }
node= node.getParent();
}
- if (node == null)
- return null;
- IASTDeclarator dtor= findInnermostDeclarator(((IASTFunctionDefinition) node).getDeclarator());
if (dtor != null) {
IASTName name= dtor.getName();
if (name != null) {

Back to the top