View | Details | Raw Unified | Return to bug 319201 | Differences between
and this patch

Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/ast/AND_AND_Expression.java (+6 lines)
Lines 60-65 Link Here
60
			}
60
			}
61
		}
61
		}
62
		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
62
		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
63
		if ((this.left.implicitConversion & TypeIds.UNBOXING) != 0) {
64
			this.left.checkNPE(currentScope, flowContext, flowInfo);
65
		}
66
		if ((this.right.implicitConversion & TypeIds.UNBOXING) != 0) {
67
			this.right.checkNPE(currentScope, flowContext, flowInfo);
68
		}
63
		FlowInfo mergedInfo = FlowInfo.conditional(
69
		FlowInfo mergedInfo = FlowInfo.conditional(
64
				rightInfo.safeInitsWhenTrue(),
70
				rightInfo.safeInitsWhenTrue(),
65
				leftInfo.initsWhenFalse().unconditionalInits().mergedWith(
71
				leftInfo.initsWhenFalse().unconditionalInits().mergedWith(
(-)compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java (+3 lines)
Lines 39-44 Link Here
39
				this.arguments[i]
39
				this.arguments[i]
40
					.analyseCode(currentScope, flowContext, flowInfo)
40
					.analyseCode(currentScope, flowContext, flowInfo)
41
					.unconditionalInits();
41
					.unconditionalInits();
42
			if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
43
				this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
44
			}
42
		}
45
		}
43
	}
46
	}
44
	// record some dependency information for exception types
47
	// record some dependency information for exception types
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ArrayAllocationExpression.java (+3 lines)
Lines 30-35 Link Here
30
			Expression dim;
30
			Expression dim;
31
			if ((dim = this.dimensions[i]) != null) {
31
			if ((dim = this.dimensions[i]) != null) {
32
				flowInfo = dim.analyseCode(currentScope, flowContext, flowInfo);
32
				flowInfo = dim.analyseCode(currentScope, flowContext, flowInfo);
33
				if ((dim.implicitConversion & TypeIds.UNBOXING) != 0) {
34
					dim.checkNPE(currentScope, flowContext, flowInfo);
35
				}
33
			}
36
			}
34
		}
37
		}
35
		if (this.initializer != null) {
38
		if (this.initializer != null) {
(-)compiler/org/eclipse/jdt/internal/compiler/ast/AssertStatement.java (+3 lines)
Lines 42-47 Link Here
42
	this.preAssertInitStateIndex = currentScope.methodScope().recordInitializationStates(flowInfo);
42
	this.preAssertInitStateIndex = currentScope.methodScope().recordInitializationStates(flowInfo);
43
43
44
	Constant cst = this.assertExpression.optimizedBooleanConstant();
44
	Constant cst = this.assertExpression.optimizedBooleanConstant();
45
	if ((this.assertExpression.implicitConversion & TypeIds.UNBOXING) != 0) {
46
		this.assertExpression.checkNPE(currentScope, flowContext, flowInfo);
47
	}
45
	boolean isOptimizedTrueAssertion = cst != Constant.NotAConstant && cst.booleanValue() == true;
48
	boolean isOptimizedTrueAssertion = cst != Constant.NotAConstant && cst.booleanValue() == true;
46
	boolean isOptimizedFalseAssertion = cst != Constant.NotAConstant && cst.booleanValue() == false;
49
	boolean isOptimizedFalseAssertion = cst != Constant.NotAConstant && cst.booleanValue() == false;
47
	
50
	
(-)compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java (+3 lines)
Lines 37-42 Link Here
37
// a field reference, a blank final field reference, a field of an enclosing instance or
37
// a field reference, a blank final field reference, a field of an enclosing instance or
38
// just a local variable.
38
// just a local variable.
39
	LocalVariableBinding local = this.lhs.localVariableBinding();
39
	LocalVariableBinding local = this.lhs.localVariableBinding();
40
	if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
41
		this.expression.checkNPE(currentScope, flowContext, flowInfo);
42
	}
40
	int nullStatus = this.expression.nullStatus(flowInfo);
43
	int nullStatus = this.expression.nullStatus(flowInfo);
41
	if (local != null && (local.type.tagBits & TagBits.IsBaseType) == 0) {
44
	if (local != null && (local.type.tagBits & TagBits.IsBaseType) == 0) {
42
		if (nullStatus == FlowInfo.NULL) {
45
		if (nullStatus == FlowInfo.NULL) {
(-)compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java (-1 / +5 lines)
Lines 47-55 Link Here
47
}
47
}
48
48
49
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
49
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
50
	return this.expression
50
	FlowInfo result = this.expression
51
		.analyseCode(currentScope, flowContext, flowInfo)
51
		.analyseCode(currentScope, flowContext, flowInfo)
52
		.unconditionalInits();
52
		.unconditionalInits();
53
	if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
54
		this.expression.checkNPE(currentScope, flowContext, flowInfo);
55
	}
56
	return result;
53
}
57
}
54
58
55
/**
59
/**
(-)compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java (+3 lines)
Lines 52-57 Link Here
52
	Constant cst = this.condition.constant;
52
	Constant cst = this.condition.constant;
53
	boolean isConditionTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
53
	boolean isConditionTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
54
	cst = this.condition.optimizedBooleanConstant();
54
	cst = this.condition.optimizedBooleanConstant();
55
	if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
56
		this.condition.checkNPE(currentScope, flowContext, flowInfo);
57
	}
55
	boolean isConditionOptimizedTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
58
	boolean isConditionOptimizedTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
56
	boolean isConditionOptimizedFalse = cst != Constant.NotAConstant && cst.booleanValue() == false;
59
	boolean isConditionOptimizedFalse = cst != Constant.NotAConstant && cst.booleanValue() == false;
57
60
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java (+3 lines)
Lines 76-81 Link Here
76
						this.arguments[i]
76
						this.arguments[i]
77
							.analyseCode(currentScope, flowContext, flowInfo)
77
							.analyseCode(currentScope, flowContext, flowInfo)
78
							.unconditionalInits();
78
							.unconditionalInits();
79
					if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
80
						this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
81
					}
79
				}
82
				}
80
			}
83
			}
81
84
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java (+3 lines)
Lines 92-97 Link Here
92
							new LoopingFlowContext(flowContext, flowInfo, this, null,
92
							new LoopingFlowContext(flowContext, flowInfo, this, null,
93
								null, this.scope)),
93
								null, this.scope)),
94
						condInfo);
94
						condInfo);
95
				if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
96
					this.condition.checkNPE(currentScope, flowContext, flowInfo);
97
				}
95
			}
98
			}
96
		}
99
		}
97
100
(-)compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java (+3 lines)
Lines 57-62 Link Here
57
	int initialComplaintLevel = (flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0 ? Statement.COMPLAINED_FAKE_REACHABLE : Statement.NOT_COMPLAINED;
57
	int initialComplaintLevel = (flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0 ? Statement.COMPLAINED_FAKE_REACHABLE : Statement.NOT_COMPLAINED;
58
58
59
	Constant cst = this.condition.optimizedBooleanConstant();
59
	Constant cst = this.condition.optimizedBooleanConstant();
60
	if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
61
		this.condition.checkNPE(currentScope, flowContext, flowInfo);
62
	}
60
	boolean isConditionOptimizedTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
63
	boolean isConditionOptimizedTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
61
	boolean isConditionOptimizedFalse = cst != Constant.NotAConstant && cst.booleanValue() == false;
64
	boolean isConditionOptimizedFalse = cst != Constant.NotAConstant && cst.booleanValue() == false;
62
65
(-)compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java (+3 lines)
Lines 40-45 Link Here
40
	if (this.initialization == null) {
40
	if (this.initialization == null) {
41
		return flowInfo;
41
		return flowInfo;
42
	}
42
	}
43
	if ((this.initialization.implicitConversion & TypeIds.UNBOXING) != 0) {
44
		this.initialization.checkNPE(currentScope, flowContext, flowInfo);
45
	}
43
	int nullStatus = this.initialization.nullStatus(flowInfo);
46
	int nullStatus = this.initialization.nullStatus(flowInfo);
44
	flowInfo =
47
	flowInfo =
45
		this.initialization
48
		this.initialization
(-)compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java (+3 lines)
Lines 65-70 Link Here
65
	if (this.arguments != null) {
65
	if (this.arguments != null) {
66
		int length = this.arguments.length;
66
		int length = this.arguments.length;
67
		for (int i = 0; i < length; i++) {
67
		for (int i = 0; i < length; i++) {
68
			if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
69
				this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
70
			}
68
			flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
71
			flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
69
		}
72
		}
70
	}
73
	}
(-)compiler/org/eclipse/jdt/internal/compiler/ast/OR_OR_Expression.java (+6 lines)
Lines 62-67 Link Here
62
			}
62
			}
63
		}
63
		}
64
		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
64
		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
65
		if ((this.left.implicitConversion & TypeIds.UNBOXING) != 0) {
66
			this.left.checkNPE(currentScope, flowContext, flowInfo);
67
		}
68
		if ((this.right.implicitConversion & TypeIds.UNBOXING) != 0) {
69
			this.right.checkNPE(currentScope, flowContext, flowInfo);
70
		}
65
		// The definitely null variables in right info when true should not be missed out while merging
71
		// The definitely null variables in right info when true should not be missed out while merging
66
		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900
72
		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900
67
		FlowInfo leftInfoWhenTrueForMerging = leftInfo.initsWhenTrue().unconditionalCopy().addPotentialInitializationsFrom(rightInfo.unconditionalInitsWithoutSideEffect());
73
		FlowInfo leftInfoWhenTrueForMerging = leftInfo.initsWhenTrue().unconditionalCopy().addPotentialInitializationsFrom(rightInfo.unconditionalInitsWithoutSideEffect());
(-)compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java (+3 lines)
Lines 71-76 Link Here
71
		if (this.arguments != null) {
71
		if (this.arguments != null) {
72
			for (int i = 0, count = this.arguments.length; i < count; i++) {
72
			for (int i = 0, count = this.arguments.length; i < count; i++) {
73
				flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo);
73
				flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo);
74
				if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
75
					this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
76
				}
74
			}
77
			}
75
		}
78
		}
76
79
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java (+3 lines)
Lines 36-41 Link Here
36
36
37
	if (this.expression != null) {
37
	if (this.expression != null) {
38
		flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
38
		flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
39
		if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
40
			this.expression.checkNPE(currentScope, flowContext, flowInfo);
41
		}
39
	}
42
	}
40
	this.initStateIndex =
43
	this.initStateIndex =
41
		currentScope.methodScope().recordInitializationStates(flowInfo);
44
		currentScope.methodScope().recordInitializationStates(flowInfo);
(-)compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java (+3 lines)
Lines 47-52 Link Here
47
	public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
47
	public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
48
		try {
48
		try {
49
			flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
49
			flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
50
			if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
51
				this.expression.checkNPE(currentScope, flowContext, flowInfo);
52
			}
50
			SwitchFlowContext switchContext =
53
			SwitchFlowContext switchContext =
51
				new SwitchFlowContext(flowContext, this, (this.breakLabel = new BranchLabel()));
54
				new SwitchFlowContext(flowContext, this, (this.breakLabel = new BranchLabel()));
52
55
(-)compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java (+3 lines)
Lines 63-68 Link Here
63
					new LoopingFlowContext(flowContext, flowInfo, this, null,
63
					new LoopingFlowContext(flowContext, flowInfo, this, null,
64
						null, currentScope)),
64
						null, currentScope)),
65
				condInfo);
65
				condInfo);
66
		if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
67
			this.condition.checkNPE(currentScope, flowContext, flowInfo);
68
		}
66
69
67
		LoopingFlowContext loopingContext;
70
		LoopingFlowContext loopingContext;
68
		FlowInfo actionInfo;
71
		FlowInfo actionInfo;
(-)src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java (+191 lines)
Lines 11662-11665 Link Here
11662
		"----------\n",
11662
		"----------\n",
11663
	    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11663
	    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11664
}
11664
}
11665
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=319201
11666
// unboxing raises an NPE
11667
public void testBug319201() {
11668
	if (this.complianceLevel < ClassFileConstants.JDK1_5)
11669
		return;
11670
	runNegativeTest(
11671
			new String[] {
11672
				"X.java",
11673
				"public class X {\n" +
11674
				"  public void foo() {\n" +
11675
				"	 Integer i = null;\n" +
11676
				"	 int j = i;\n" + // should warn
11677
				"  }\n" +
11678
				"}"},
11679
			"----------\n" + 
11680
			"1. ERROR in X.java (at line 4)\n" + 
11681
			"	int j = i;\n" + 
11682
			"	        ^\n" + 
11683
			"Null pointer access: The variable i can only be null at this location\n" + 
11684
			"----------\n",
11685
		    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11686
}
11687
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=319201
11688
//unboxing could raise an NPE
11689
public void testBug319201a() {
11690
	if (this.complianceLevel < ClassFileConstants.JDK1_5)
11691
		return;
11692
	runNegativeTest(
11693
			new String[] {
11694
				"X.java",
11695
				"public class X {\n" +
11696
				"  public void foo(Integer i) {\n" +
11697
				"    if (i == null) {};\n" +
11698
				"	 int j;\n" +
11699
				"	 j = i;\n" + // should warn
11700
				"  }\n" +
11701
				"}"},
11702
			"----------\n" + 
11703
			"1. ERROR in X.java (at line 5)\n" + 
11704
			"	j = i;\n" + 
11705
			"	    ^\n" + 
11706
			"Potential null pointer access: The variable i may be null at this location\n" + 
11707
			"----------\n",
11708
		    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11709
}
11710
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=319201
11711
//unboxing raises an NPE
11712
public void testBug319201b() {
11713
	if (this.complianceLevel < ClassFileConstants.JDK1_5)
11714
		return;
11715
	runNegativeTest(
11716
			new String[] {
11717
				"X.java",
11718
				"public class X {\n" +
11719
				"  public void foo() {\n" +
11720
				"    Boolean bo = null;;\n" +
11721
				"	 bar(bo);\n" + // should warn
11722
				"  }\n" +
11723
				"  void bar(boolean b) {}\n" +
11724
				"}"},
11725
			"----------\n" + 
11726
			"1. ERROR in X.java (at line 4)\n" + 
11727
			"	bar(bo);\n" + 
11728
			"	    ^^\n" + 
11729
			"Null pointer access: The variable bo can only be null at this location\n" + 
11730
			"----------\n",
11731
		    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11732
}
11733
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=319201
11734
//unboxing raises an NPE
11735
public void testBug319201c() {
11736
	if (this.complianceLevel < ClassFileConstants.JDK1_5)
11737
		return;
11738
	runNegativeTest(
11739
			new String[] {
11740
                "X.java",
11741
                "class Y { public Y(boolean b1, boolean b2) {} }\n" +
11742
                "public class X extends Y {\n" +
11743
                "  public X(boolean b, Boolean b2) {\n" +
11744
                "      super(b2 == null, b2);\n" +
11745
                "  }\n" +
11746
                "  class Z {\n" +
11747
                "      public Z(boolean b) {}\n" +
11748
                "  }\n" +
11749
                "  boolean fB = (Boolean)null;\n" +
11750
                "  public boolean foo(boolean inB) {\n" +
11751
                "      Boolean b1 = null;\n" +
11752
                "      X x = new X(b1, null);\n" +
11753
                "      Boolean b2 = null;\n" +
11754
                "      boolean dontcare = b2 && inB;\n" +
11755
                "      Boolean b3 = null;\n" +
11756
                "      dontcare = inB || b3;\n" +
11757
                "      Integer dims = null;\n" +
11758
                "      char[] cs = new char[dims];\n" +
11759
                "      Boolean b5 = null;\n" +
11760
                "      do {\n" +
11761
                "          Boolean b4 = null;\n" +
11762
                "          for (int i=0;b4; i++);\n" +
11763
                "      } while (b5);\n" +
11764
                "      Boolean b6 = null;\n" +
11765
                "      if (b6) { }\n" +
11766
                "      Boolean b7 = null;\n" +
11767
                "      Z z = this.new Z(b7);\n" +
11768
                "      Integer sel = null;\n" +
11769
                "      switch(sel) {\n" +
11770
                "          case 1: break;\n" +
11771
                "          default: break;\n" +
11772
                "      }\n" +
11773
                "      Boolean b8 = null;\n" +
11774
                "      while (b8) {}\n" +
11775
                "      Boolean b9 = null;\n" +
11776
                "      dontcare = (boolean)b9;\n" +
11777
                "      Boolean b10 = null;\n" +
11778
                "      assert b10 : \"shouldn't happen, but will\";\n" +
11779
                "      Boolean b11 = null;\n" +
11780
                "      return b11;\n" +
11781
                "  }\n" +
11782
				"}"},
11783
			"----------\n" + 
11784
			"1. ERROR in X.java (at line 4)\n" + 
11785
			"	super(b2 == null, b2);\n" + 
11786
			"	                  ^^\n" + 
11787
			"Potential null pointer access: The variable b2 may be null at this location\n" + 
11788
			"----------\n" + 
11789
			"2. ERROR in X.java (at line 12)\n" + 
11790
			"	X x = new X(b1, null);\n" + 
11791
			"	            ^^\n" + 
11792
			"Null pointer access: The variable b1 can only be null at this location\n" + 
11793
			"----------\n" + 
11794
			"3. ERROR in X.java (at line 14)\n" + 
11795
			"	boolean dontcare = b2 && inB;\n" + 
11796
			"	                   ^^\n" + 
11797
			"Null pointer access: The variable b2 can only be null at this location\n" + 
11798
			"----------\n" + 
11799
			"4. ERROR in X.java (at line 16)\n" + 
11800
			"	dontcare = inB || b3;\n" + 
11801
			"	                  ^^\n" + 
11802
			"Null pointer access: The variable b3 can only be null at this location\n" + 
11803
			"----------\n" + 
11804
			"5. ERROR in X.java (at line 18)\n" + 
11805
			"	char[] cs = new char[dims];\n" + 
11806
			"	                     ^^^^\n" + 
11807
			"Null pointer access: The variable dims can only be null at this location\n" + 
11808
			"----------\n" + 
11809
			"6. ERROR in X.java (at line 22)\n" + 
11810
			"	for (int i=0;b4; i++);\n" + 
11811
			"	             ^^\n" + 
11812
			"Null pointer access: The variable b4 can only be null at this location\n" + 
11813
			"----------\n" + 
11814
			"7. ERROR in X.java (at line 23)\n" + 
11815
			"	} while (b5);\n" + 
11816
			"	         ^^\n" + 
11817
			"Null pointer access: The variable b5 can only be null at this location\n" + 
11818
			"----------\n" + 
11819
			"8. ERROR in X.java (at line 25)\n" + 
11820
			"	if (b6) { }\n" + 
11821
			"	    ^^\n" + 
11822
			"Null pointer access: The variable b6 can only be null at this location\n" + 
11823
			"----------\n" + 
11824
			"9. ERROR in X.java (at line 27)\n" + 
11825
			"	Z z = this.new Z(b7);\n" + 
11826
			"	                 ^^\n" + 
11827
			"Null pointer access: The variable b7 can only be null at this location\n" + 
11828
			"----------\n" + 
11829
			"10. ERROR in X.java (at line 29)\n" + 
11830
			"	switch(sel) {\n" + 
11831
			"	       ^^^\n" + 
11832
			"Null pointer access: The variable sel can only be null at this location\n" + 
11833
			"----------\n" + 
11834
			"11. ERROR in X.java (at line 34)\n" + 
11835
			"	while (b8) {}\n" + 
11836
			"	       ^^\n" + 
11837
			"Null pointer access: The variable b8 can only be null at this location\n" + 
11838
			"----------\n" + 
11839
			"12. ERROR in X.java (at line 36)\n" + 
11840
			"	dontcare = (boolean)b9;\n" + 
11841
			"	                    ^^\n" + 
11842
			"Null pointer access: The variable b9 can only be null at this location\n" + 
11843
			"----------\n" + 
11844
			"13. ERROR in X.java (at line 38)\n" + 
11845
			"	assert b10 : \"shouldn\'t happen, but will\";\n" + 
11846
			"	       ^^^\n" + 
11847
			"Null pointer access: The variable b10 can only be null at this location\n" + 
11848
			"----------\n" + 
11849
			"14. ERROR in X.java (at line 40)\n" + 
11850
			"	return b11;\n" + 
11851
			"	       ^^^\n" + 
11852
			"Null pointer access: The variable b11 can only be null at this location\n" + 
11853
			"----------\n",
11854
		    JavacTestOptions.Excuse.EclipseWarningConfiguredAsError);
11855
}
11665
}
11856
}

Return to bug 319201