summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPat Gavlin <pagavlin@microsoft.com>2016-05-02 16:40:26 -0700
committerPat Gavlin <pagavlin@microsoft.com>2016-05-03 07:15:42 -0700
commit8686653b0266b82a5ffb6d7aca4116d72c88df86 (patch)
tree305e7fb2c8ebaab8aa0fe3692f6a55bf1da48f99
parentea040083e57c706c6fe4c34f5a51b5851c249b43 (diff)
downloadcoreclr-8686653b0266b82a5ffb6d7aca4116d72c88df86.tar.gz
coreclr-8686653b0266b82a5ffb6d7aca4116d72c88df86.tar.bz2
coreclr-8686653b0266b82a5ffb6d7aca4116d72c88df86.zip
Fix contracts in `tryResolveToken` et. al.
`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`.
-rw-r--r--src/vm/jitinterface.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/vm/jitinterface.cpp b/src/vm/jitinterface.cpp
index 2cf2ab4838..ab7940cc47 100644
--- a/src/vm/jitinterface.cpp
+++ b/src/vm/jitinterface.cpp
@@ -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))
{