Add note about transient pointers to ECMA augments (#86622)
authorJan Kotas <jkotas@microsoft.com>
Tue, 23 May 2023 05:04:38 +0000 (22:04 -0700)
committerGitHub <noreply@github.com>
Tue, 23 May 2023 05:04:38 +0000 (22:04 -0700)
Fixes #62784

docs/design/specs/Ecma-335-Augments.md

index e3ad8ad..bdebd1d 100644 (file)
@@ -19,6 +19,7 @@ This is a list of additions and edits to be made in ECMA-335 specifications. It
 - [Checked user-defined operators](#checked-user-defined-operators)
 - [Atomic reads and writes](#atomic-reads-and-writes)
 - [Backward branch constraints](#backward-branch-constraints)
+- [Transient pointers](#transient-pointers)
 - [API documentation](#api-documentation)
 - [Debug Interchange Format](#debug-interchange-format)
 
@@ -1049,6 +1050,12 @@ A conforming CLI shall guarantee that read and write access of *built-in primiti
 
 Section "II.1.7.5 Backward branch constraints" is deleted. These constraints were not enforced by any mainstream .NET runtime and they are not respected by .NET compilers. It means that it is not possible to infer the exact state of the evaluation stack at every instruction with a single forward-pass through the CIL instruction stream.
 
+## Transient pointers
+
+The paragraphs mentioning "transient pointers" in section "I.12.3.2.1 The evaluation stack" are deleted. The transient pointers seemed to be a concept in the very early versions of the spec that was deleted in the final version of the spec and this one place was missed.
+
+Instead, note is added to sections "III.3.39 ldarga" and "III.3.44 ldloca": The arguments / local variables are stored in unmanaged memory. The address of argument / local variable can be converted to unmanaged pointer without explicit pinning.
+
 ## API documentation
 
 API documentation included in partition IV: Profiles and Libraries is superseded by the actively maintained API documentation in https://github.com/dotnet/dotnet-api-docs repo. The documentation is  published at https://docs.microsoft.com/en-us/dotnet/api/.