dotnet/roslyn

Compiler should report CS0208 - "Cannot declare pointer to a managed object" when managed object pointer is returned from IL with type inferrence

Offen

#33.041 geöffnet am 01.02.2019

 (0 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)C# (4.257 Forks)batch import
Area-CompilersBughelp wanted

Repository-Metriken

Stars
 (20.414 Sterne)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (256 gemergte PRs in 30 T)

Beschreibung

Version Used: C# 7.2

Steps to Reproduce:

  1. Have this IL and compile it
.method public hidebysig static !!0* GetPointer<T>(
      !!0 'value'
    ) cil managed
{
    ldarga 0
    conv.u
    ret
}
  1. Call it from C# as such
object obj = new object();
var objPtr = <something>.GetPointer(obj);

Expected Behavior: CS0208 - "Cannot declare pointer to a managed object"

[or, a bit more of a stretch, allow managed type pointers, such as Exception*]

Actual Behavior: Compiles and behaves like an actual object reference pointer. So objPtr->GetType() is legal and runs IMPORTANT: This only works with that type inferrence, Without var it doesn't compile

Contributor Guide