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;