diff --git a/ICSharpCode.Decompiler/IL/Instructions/Block.cs b/ICSharpCode.Decompiler/IL/Instructions/Block.cs
index 78ee49db3..131832d92 100644
--- a/ICSharpCode.Decompiler/IL/Instructions/Block.cs
+++ b/ICSharpCode.Decompiler/IL/Instructions/Block.cs
@@ -52,6 +52,7 @@ namespace ICSharpCode.Decompiler.IL
 		public static readonly SlotInfo InstructionSlot = new SlotInfo("Instruction", isCollection: true);
 		public static readonly SlotInfo FinalInstructionSlot = new SlotInfo("FinalInstruction");
 		
+		public readonly BlockType Type;
 		public readonly InstructionCollection<ILInstruction> Instructions;
 		ILInstruction finalInstruction;
 		
@@ -89,15 +90,16 @@ namespace ICSharpCode.Decompiler.IL
 				finalInstruction.ChildIndex = Instructions.Count;
 		}
 		
-		public Block() : base(OpCode.Block)
+		public Block(BlockType type = BlockType.ControlFlow) : base(OpCode.Block)
 		{
+			this.Type = type;
 			this.Instructions = new InstructionCollection<ILInstruction>(this, 0);
 			this.FinalInstruction = new Nop();
 		}
 		
 		public override ILInstruction Clone()
 		{
-			Block clone = new Block();
+			Block clone = new Block(Type);
 			clone.ILRange = this.ILRange;
 			clone.Instructions.AddRange(this.Instructions.Select(inst => inst.Clone()));
 			clone.FinalInstruction = this.FinalInstruction.Clone();
@@ -195,4 +197,10 @@ namespace ICSharpCode.Decompiler.IL
 			}
 		}
 	}
+	
+	public enum BlockType {
+		ControlFlow,
+		ArrayInitializer,
+		CompoundOperator
+	}
 }
diff --git a/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs b/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs
index c0495e36d..70dc1ee9a 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs
@@ -69,7 +69,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
 					ILVariable finalStore;
 					int instructionsToRemove;
 					if (HandleSimpleArrayInitializer(body, pos + 1, v, arrayLength[0], out finalStore, out values, out instructionsToRemove)) {
-						var block = new Block();
+						var block = new Block(BlockType.ArrayInitializer);
 						var tempStore = function.RegisterVariable(VariableKind.StackSlot, v.Type);
 						block.Instructions.Add(new StLoc(tempStore, new NewArr(elementType, arrayLength.Select(l => new LdcI4(l)).ToArray())));
 						block.Instructions.AddRange(values.SelectWithIndex(
@@ -87,7 +87,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
 						return true;
 					}
 					if (HandleJaggedArrayInitializer(body, pos + 1, v, arrayLength[0], out finalStore, out values, out instructionsToRemove)) {
-						var block = new Block();
+						var block = new Block(BlockType.ArrayInitializer);
 						var tempStore = function.RegisterVariable(VariableKind.StackSlot, v.Type);
 						block.Instructions.Add(new StLoc(tempStore, new NewArr(elementType, arrayLength.Select(l => new LdcI4(l)).ToArray())));
 						block.Instructions.AddRange(values.SelectWithIndex((i, value) => StElem(new LdLoc(tempStore), new[] { new LdcI4(i) }, value, elementType)));
@@ -277,7 +277,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
 		
 		Block BlockFromInitializer(ILVariable v, IType elementType, int[] arrayLength, ILInstruction[] values)
 		{
-			var block = new Block();
+			var block = new Block(BlockType.ArrayInitializer);
 			block.Instructions.Add(new StLoc(v, new NewArr(elementType, arrayLength.Select(l => new LdcI4(l)).ToArray())));
 			int step = arrayLength.Length + 1;
 			for (int i = 0; i < values.Length / step; i++) {