diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StackMapAttributeTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StackMapAttributeTest.java
index f6d4246..aa95982 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StackMapAttributeTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StackMapAttributeTest.java
@@ -7912,4 +7912,78 @@
 				assertEquals("Wrong contents", expectedOutput, actualOutput);
 			}
 	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+	// Verify the reduced range of locals.
+	public void testBug380927() throws Exception {
+		this.runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"    public final static Object f() {\n" +
+						"        final Object a = null;\n" +
+						"        Object b;\n" +
+						"        label: do {\n" +
+						"            switch (0) {\n" +
+						"            case 1: {\n" +
+						"                b = a;\n" +
+						"            }\n" +
+						"                break;\n" +
+						"            default:\n" +
+						"                break label;\n" +
+						"            }\n" +
+						"        } while (true);\n" +
+						"        return a;\n" +
+						"    }\n" +
+						"    public static void main(final String[] args) {\n" +
+						"        f();\n" +
+						"        System.out.println(\"SUCCESS\");\n" +
+						"    }\n" +
+						"}\n"
+				},
+				"SUCCESS");
+
+			ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler();
+			byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator  +"X.class"));
+			String actualOutput =
+				disassembler.disassemble(
+					classFileBytes,
+					"\n",
+					ClassFileBytesDisassembler.DETAILED);
+
+			String expectedOutput =
+					"  // Method descriptor #15 ()Ljava/lang/Object;\n" + 
+					"  // Stack: 1, Locals: 2\n" + 
+					"  public static final java.lang.Object f();\n" + 
+					"     0  aconst_null\n" + 
+					"     1  astore_0 [a]\n" + 
+					"     2  iconst_0\n" + 
+					"     3  tableswitch default: 25\n" + 
+					"          case 1: 20\n" + 
+					"    20  aload_0 [a]\n" + 
+					"    21  astore_1 [b]\n" + 
+					"    22  goto 2\n" + 
+					"    25  aload_0 [a]\n" + 
+					"    26  areturn\n" + 
+					"      Line numbers:\n" + 
+					"        [pc: 0, line: 3]\n" + 
+					"        [pc: 2, line: 6]\n" + 
+					"        [pc: 20, line: 8]\n" + 
+					"        [pc: 22, line: 10]\n" + 
+					"        [pc: 25, line: 15]\n" + 
+					"      Local variable table:\n" + 
+					"        [pc: 2, pc: 27] local: a index: 0 type: java.lang.Object\n" + 
+					"        [pc: 22, pc: 25] local: b index: 1 type: java.lang.Object\n" + 
+					"      Stack map table: number of frames 3\n" + 
+					"        [pc: 2, append: {java.lang.Object}]\n" + 
+					"        [pc: 20, same]\n" + 
+					"        [pc: 25, same]\n" + 
+					"  \n"; 
+			int index = actualOutput.indexOf(expectedOutput);
+			if (index == -1 || expectedOutput.length() == 0) {
+				System.out.println(Util.displayString(actualOutput, 2));
+			}
+			if (index == -1) {
+				assertEquals("Wrong contents", expectedOutput, actualOutput);
+			}
+	}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
index 414e6e0..a0678a8 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
@@ -2166,8 +2166,6 @@
 }
 // https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
 public void testBug380927() {
-	if (this.complianceLevel >= ClassFileConstants.JDK1_7)
-		return;
 	this.runConformTest(
 			new String[] {
 				"X.java",
@@ -2195,6 +2193,209 @@
 			},
 			"Success");	
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927a() {
+	this.runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public final static Object f() {\n" +
+				"        final Object a = null;\n" +
+				"        Object b;\n" +
+				"        label: while (true) {\n" +
+				"            switch (0) {\n" +
+				"            case 1: {\n" +
+				"                b = a;\n" +
+				"            }\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        return a;\n" +
+				"    }\n" +
+				"    public static void main(final String[] args) {\n" +
+				"        f();\n" +
+				"        System.out.println(\"Success\");\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"Success");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927b() {
+	this.runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public final static Object f() {\n" +
+				"        final Object a = null;\n" +
+				"        Object b;\n" +
+				"        label: for(;;) {\n" +
+				"            switch (0) {\n" +
+				"            case 1: {\n" +
+				"                b = a;\n" +
+				"            }\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        return a;\n" +
+				"    }\n" +
+				"    public static void main(final String[] args) {\n" +
+				"        f();\n" +
+				"        System.out.println(\"Success\");\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"Success");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927c() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	this.runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public final static Object f() {\n" +
+				"        final Object a = null;\n" +
+				"        Object b;\n" +
+				"        label: for(int i : new int [] { 10 }) {\n" +
+				"            switch (0) {\n" +
+				"            case 1: {\n" +
+				"                b = a;\n" +
+				"            }\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        return a;\n" +
+				"    }\n" +
+				"    public static void main(final String[] args) {\n" +
+				"        f();\n" +
+				"        System.out.println(\"Success\");\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"Success");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927d() {
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public static void main(String [] args) {\n" +
+				"        Object b;\n" +
+				"        label: do {\n" +
+				"            switch (0) {\n" +
+				"            case 1:\n" +
+				"                b = null;\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        } while (true);\n" +
+				"        System.out.println(b);\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 13)\n" + 
+			"	System.out.println(b);\n" + 
+			"	                   ^\n" + 
+			"The local variable b may not have been initialized\n" + 
+			"----------\n");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927e() {
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public static void main(String [] args) {\n" +
+				"        Object b;\n" +
+				"        label: while (true) {\n" +
+				"            switch (0) {\n" +
+				"            case 1:\n" +
+				"                b = null;\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        System.out.println(b);\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 13)\n" + 
+			"	System.out.println(b);\n" + 
+			"	                   ^\n" + 
+			"The local variable b may not have been initialized\n" + 
+			"----------\n");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927f() {
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public static void main(String [] args) {\n" +
+				"        Object b;\n" +
+				"        label: for(;;) {\n" +
+				"            switch (0) {\n" +
+				"            case 1:\n" +
+				"                b = null;\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        System.out.println(b);\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 13)\n" + 
+			"	System.out.println(b);\n" + 
+			"	                   ^\n" + 
+			"The local variable b may not have been initialized\n" + 
+			"----------\n");	
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
+public void testBug380927g() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public static void main(String [] args) {\n" +
+				"        Object b;\n" +
+				"        label: for(int i : new int [] { 10 }) {\n" +
+				"            switch (0) {\n" +
+				"            case 1:\n" +
+				"                b = null;\n" +
+				"                break;\n" +
+				"            default:\n" +
+				"                break label;\n" +
+				"            }\n" +
+				"        }\n" +
+				"        System.out.println(b);\n" +
+				"    }\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 13)\n" + 
+			"	System.out.println(b);\n" + 
+			"	                   ^\n" + 
+			"The local variable b may not have been initialized\n" + 
+			"----------\n");	
+}
 public static Class testClass() {
 	return SwitchTest.class;
 }
diff --git a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
index 209c98b..cbcf442 100644
--- a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
+++ b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
@@ -21,7 +21,7 @@
 #Format: compiler.name = word1 word2 word3
 compiler.name = Eclipse Compiler for Java(TM)
 #Format: compiler.version = 0.XXX[, other words (don't forget the comma if adding other words)]
-compiler.version = 0.C57, 3.8.0
+compiler.version = 0.C58, 3.8.0
 compiler.copyright = Copyright IBM Corp 2000, 2012. All rights reserved.
 
 ### progress
diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index e37497a..c1798d2 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -42,11 +42,24 @@
 	</td>
   </tr>
 </table>
+<a name="v_C58"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.8.0 - May 31, 2012
+<br>Project org.eclipse.jdt.core v_C58
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C58">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927">380927</a>
+VerifyError issue with inconsistent stack map frames with do..while and nested switch statements.
+
 <a name="v_C57"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.8.0 - May 29, 2012 - 3.8.0
+Eclipse SDK 3.8.0 - May 29, 2012
 <br>
 <h2>What's new in this drop</h2>
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
index 774c7aa..1fd8f3e 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
@@ -130,7 +130,7 @@
 								// recover upstream null info
 						isConditionOptimizedTrue,
 						(condInfo.tagBits & FlowInfo.UNREACHABLE) == 0
-								? flowInfo.addInitializationsFrom(condInfo.initsWhenFalse()) 
+								? flowInfo.copy().addInitializationsFrom(condInfo.initsWhenFalse()) // https://bugs.eclipse.org/bugs/show_bug.cgi?id=380927
 								: condInfo,
 							// recover null inits from before condition analysis
 						false, // never consider opt false case for DO loop, since break can always occur (47776)
