dotnet/roslyn

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

Aberta

#33.041 aberto em 1 de fev. de 2019

 (0 comentário) (0 reação) (0 responsável)C# (4.257 forks)batch import
Area-CompilersBughelp wanted

Métricas do repositório

Stars
 (20.414 estrelas)
Métricas de merge de PR
 (Mesclagem média 6d 17h) (256 fundiu PRs em 30d)

Description

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

Guia do colaborador