Fix contracts in `tryResolveToken` et. al.
authorPat Gavlin <pagavlin@microsoft.com>
Mon, 2 May 2016 23:40:26 +0000 (16:40 -0700)
committerPat Gavlin <pagavlin@microsoft.com>
Tue, 3 May 2016 14:15:42 +0000 (07:15 -0700)
`isValidToken`'s contract was too conservative: it was needlessly marked
`THROWS`, `GC_TRIGGERS`, and `MODE_PREEMPTIVE`. Its contract and those
of its callers have been tightened to `NOTHROW`, `GC_NOTRIGGER`, and
`MODE_ANY`.

Commit migrated from https://github.com/dotnet/coreclr/commit/8686653b0266b82a5ffb6d7aca4116d72c88df86

src/coreclr/src/vm/jitinterface.cpp

index 2cf2ab4..ab7940c 100644 (file)
@@ -817,14 +817,14 @@ BOOL CEEInfo::isValidToken (
 {
     CONTRACTL {
         SO_TOLERANT;
-        THROWS;
-        GC_TRIGGERS;
-        MODE_PREEMPTIVE;
+        NOTHROW;
+        GC_NOTRIGGER;
+        MODE_ANY;
     } CONTRACTL_END;
 
     BOOL result = FALSE;
 
-    JIT_TO_EE_TRANSITION();
+    JIT_TO_EE_TRANSITION_LEAF();
 
     if (IsDynamicScope(module))
     {
@@ -837,7 +837,7 @@ BOOL CEEInfo::isValidToken (
         result = ((Module *)module)->GetMDImport()->IsValidToken(metaTOK);
     }
 
-    EE_TO_JIT_TRANSITION();
+    EE_TO_JIT_TRANSITION_LEAF();
 
     return result;
 }
@@ -1302,7 +1302,12 @@ struct TryResolveTokenFilterParam
 
 bool isValidTokenForTryResolveToken(CEEInfo* info, CORINFO_RESOLVED_TOKEN* resolvedToken)
 {
-    LIMITED_METHOD_CONTRACT;
+    CONTRACTL {
+        NOTHROW;
+        GC_NOTRIGGER;
+        SO_TOLERANT;
+        MODE_ANY;
+    } CONTRACTL_END;
 
     if (!info->isValidToken(resolvedToken->tokenScope, resolvedToken->token))
     {