dotnet/roslyn

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

Aperta

#33.041 aperta il 1 feb 2019

 (0 commenti) (0 reazioni) (0 assegnatari)C# (4257 fork)batch import
Area-CompilersBughelp wanted

Metriche repository

Star
 (20.414 stelle)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

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

Guida contributor