Bug 40493

Summary: Invalid IL when using ?. operator on a Func<T> parameter in a generic function when T is unconstrained
Product: [Mono] Compilers Reporter: Michał Przybyś <michal>
Component: C#Assignee: Marek Safar <masafa>
Status: RESOLVED FIXED    
Severity: normal CC: mono-bugs+mono
Priority: ---    
Version: 4.2.0 (C6)   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Tags: Is this bug a regression?: ---
Last known good build:

Description Michał Przybyś 2016-04-18 19:56:13 UTC
The following code is compiled by mcs and throws an InvalidProgramException when run:

using System;

static class Program
{
    static void Bug<T>(Func<T> func)
    {
        Console.WriteLine(func?.Invoke());
    }
    
    static void Main()
    {
        Bug(() => 123);
    }
}

csc from VS2015 on the other hand returns error "CS0023: Operator '?' cannot be applied to operand of type 'T'" unless there is a constraint on T.

Reproduced both on Ubuntu with mono 4.2.3.4 and FreeBSD with mono 4.2.2.10.
Comment 1 Marek Safar 2016-04-20 12:33:33 UTC
Fixed in master and 4.5 preview