KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Apparently, Constrained Execution Region guarantees do not apply to iterators (probably because of how they are implemented and all), but is this a bug or by design? [See the example below.] i.e. What are the rules on CERs being used with iterators? using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; class Program { static bool cerWorked; static void Main(string[] args) { try { cerWorked = true; foreach (var v in Iterate()) { } } catch { System.Console.WriteLine(cerWorked); } System.Console.ReadKey(); } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] unsafe static void StackOverflow() { Big big; big.Bytes[int.MaxValue - 1] = 1; } static System.Collections.Generic.IEnumerable<int> Iterate() { RuntimeHelpers.PrepareConstrainedRegions(); try { cerWorked = false; yield return 5; } finally { StackOverflow(); } } unsafe struct Big { public fixed byte Bytes[int.MaxValue]; } } (Code mostly stolen from here .)
Tags (comma-separated)
Save Edits
Cancel