From b2f459e07512b5df336b26d39ead473f7bc7dd72 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 18 Feb 2015 20:21:12 -0800 Subject: [PATCH] Bug 460183 - Template resolution problem with trailing-return-type function in index Change-Id: I87d1ef78b064d187b4dd204ce1e040b98418808b --- .../tests/IndexCPPTemplateResolutionTest.java | 34 +++++++++++++++++++ .../core/pdom/db/TypeMarshalBuffer.java | 4 ++- 2 files changed, 37 insertions(+), 1 deletion(-) 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 bcd6055182b..9016b33c6a5 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 @@ -741,6 +741,40 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa assertEquals(((ICPPBasicType)bar.getType().getReturnType()).getType(), IBasicType.t_void); } + // template + // auto trailing_return_type(T& p) -> decltype(p.m()); + + // template + // struct A { + // typedef T type; + // }; + // + // template + // typename A::type declval(); + // + // template + // class B {}; + // + // template + // using C = decltype(trailing_return_type(declval())); + // + // template + // B> waldo(T& q); + // + // template + // struct D { + // T* m(); + // }; + // + // D b; + // + // void test() { + // waldo(b); + // } + public void testTrailingReturnType_460183() throws Exception { + checkBindings(); + } + // template class A { // public: // typedef T TD; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java index 61b780e1c61..b99671275a6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java @@ -117,7 +117,9 @@ public final class TypeMarshalBuffer implements ITypeMarshalBuffer { fPos += 1; long rec= getRecordPointer(); return (IBinding) PDOMNode.load(fLinkage.getPDOM(), rec); - } else if (firstBytes == NULL_TYPE || firstBytes == UNSTORABLE_TYPE) { + } else if (firstBytes == NULL_TYPE) { + return null; + } else if (firstBytes == UNSTORABLE_TYPE) { return new ProblemBinding(null, ISemanticProblem.TYPE_NOT_PERSISTED); }