From d9c458425762b92d80c01aa450e416bd217a174b Mon Sep 17 00:00:00 2001 From: Nathan Ridge <zeratul976@hotmail.com> Date: Tue, 17 Dec 2013 22:06:12 -0500 Subject: [PATCH] Bug 395074 - NPE in EvalFixed.<init> Change-Id: I2457557add26e0121bd974fcc954ed879a8e8cf4 Signed-off-by: Nathan Ridge <zeratul976@hotmail.com> Reviewed-on: https://git.eclipse.org/r/19932 Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com> IP-Clean: Sergey Prigogin <eclipse.sprigogin@gmail.com> Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com> --- .../parser/tests/ast2/AST2TemplateTests.java | 18 ++++++++++++++++++ .../parser/cpp/semantics/EvalMemberAccess.java | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) 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 e4dc436fbf6..19613597846 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 @@ -7741,6 +7741,24 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper helper = new BindingAssertionHelper(getAboveComment(), true); helper.assertProblem("bind(s, 0, foo)", "bind"); } + + // struct a3 { + // int xxx; + // }; + // + // template <template <typename> class V> + // struct S {}; + // + // template <typename V> + // int foo(...); + // + // template <typename V> + // int foo(void*, S<V::template xxx>* = 0); + // + // int value = sizeof(foo<a3>(0)); + public void testNPE_395074() throws Exception { + parseAndCheckBindings(); + } // template<typename T> // T forward(T); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index b88c50bf7f8..ffee46b6346 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -264,7 +264,8 @@ public class EvalMemberAccess extends CPPDependentEvaluation { return ((IEnumerator) fMember).getValue(); } if (fMember instanceof IVariable) { - return ((IVariable) fMember).getInitialValue(); + IValue initialValue = ((IVariable) fMember).getInitialValue(); + return initialValue == null ? Value.UNKNOWN : initialValue; } if (fMember instanceof IFunction) { return Value.UNKNOWN;