C# 7.0 big boom
От: Flem1234  
Дата: 27.04.17 04:52
Оценка: :))) :))
Берём код, вставляем в VS 2017, билдим.
using System;

namespace ConsoleApp3
{
    class BC { }
    class DC1 : BC { }
    class DC2 : BC { }

    class Program
    {
        static void Main(string[] args)
        {
        }

        private string Q(BC bclass, int n = 0)
        {
            switch (bclass)
            {
                case DC1 mc:

                    string A(BC map)
                    {
                        return "";
                    }

                    string B(BC map) 
                    {
                        switch (map)
                        {
                            case DC1 ne:
                                Action<int> a = _ => B(new DC2());
                                return "";
                            case DC2 b: 
                                return C(b);
                            default:
                                return A(map);
                        }
                    }

                    string C(BC map)
                    {
                        switch (map)
                        {
                            case DC1 me:
                                return n.ToString();
                            default:
                                return "";
                        }
                    }
                    break;

                default:
                    break;
            }

            return "";
        }
    }
}


Результат:

"csc.exe" exited with code -2146232797.    ConsoleApp3


Свежий билд Рослина дает шанс порассматривать стектрейс

Пичалька =(

P.S. Когда говорили что C# со временем превратится в Nemerle, я представлял что-то другое
c# 7.0 compiler bug
Re: C# 7.0 big boom
От: hardcase Пират http://nemerle.org
Дата: 27.04.17 15:26
Оценка: 8 (2) +1
Здравствуйте, Flem1234, Вы писали:

F>Берём код, вставляем в VS 2017, билдим.


Камрады переусердствовали с оптимизацией: компилятор пытается замыкания сделать структурами, но этого делать нельзя, если локальная функция используется в лямбде.
Все будет работать, если закомментировать строку
Action<int> a = _ => B(new DC2());
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: C# 7.0 big boom
От: _NN_ www.nemerleweb.com
Дата: 27.04.17 19:57
Оценка:
Здравствуйте, hardcase, Вы писали:

Всё грустнее чем кажется.
Если вместо return C(b); написать return ""; то будет собираться.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.