Bug 20603 - Unreachable local variable declaration causing MCS to crash
Summary: Unreachable local variable declaration causing MCS to crash
Alias: None
Product: Compilers
Classification: Mono
Component: C# ()
Version: 3.2.x
Hardware: PC Linux
: --- normal
Target Milestone: ---
Assignee: Marek Safar
Depends on:
Reported: 2014-06-15 13:56 UTC by neil.sculthorpe
Modified: 2014-06-16 05:58 UTC (History)
1 user (show)

Is this bug a regression?: ---
Last known good build:

Minimal bug file causing MCS to crash (108 bytes, text/x-csharp)
2014-06-15 13:56 UTC, neil.sculthorpe

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.

Please create a new report on GitHub or Developer Community with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:

Description neil.sculthorpe 2014-06-15 13:56:32 UTC
Created attachment 7078 [details]
Minimal bug file causing MCS to crash

Compiling the following problem,

class Program {
  public static void Main() {
         goto L1;
         int z;
     L1: z = 3;

causes the MCS compiler (v3.2.8.0, on Ubuntu 14.04) to crash with the following error:

Unhandled Exception:
Mono.CSharp.InternalErrorException: Labels.cs(3,22): Program.Main() ---> Mono.CSharp.InternalErrorException: Labels.cs(3,29): ---> System.NullReferenceException: Object reference not set to an instance of an object

However, a similar program compiles and runs successfully:

class Program {
  public static void Main() {
         int x = 7;
         if (x > 0) {goto L1;}
         int z;
     L1: z = 3;

I speculate that in the former program, an optimisation is deleting "int z" as unreachable-code.  In the latter program, making "x" a "const" variable also triggers the error.
Comment 1 Marek Safar 2014-06-16 05:58:29 UTC
Fixed in master