dotnet/roslyn

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

开放

#33,041 创建于 2019年2月1日

 (0 条评论) (0 个反应) (0 位负责人)C# (4,257 个派生)batch import
Area-CompilersBughelp wanted

仓库指标

星标
 (20,414 个星标)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 256 个 PR)

描述

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

贡献者指南