-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix SuperPMI assertion call in MethodContext::recGetHelperFtn()
#90778
Conversation
We can't use string concatenation in an argument to the `AssertCodeMsg` macro, so construct the string we want to print first.
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsWe can't use string concatenation in an argument to the
|
@jakobbotsch PTAL |
Related: #90711 |
// We can't use string concatenation in an argument to the `AssertCodeMsg` macro, so construct the string here. | ||
char assertMsgBuff[200]; | ||
sprintf_s(assertMsgBuff, sizeof(assertMsgBuff), "old: %016" PRIX64 " %016" PRIX64 ", new: %016" PRIX64 " %016" PRIX64, | ||
oldValue.A, oldValue.B, value.A, value.B); | ||
AssertCodeMsg(oldValue.A == value.A && oldValue.B == oldValue.B, EXCEPTIONCODE_MC, "collision! %s", assertMsgBuff); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should just fix AssertCodeMsg
like this:
- LogException(exCode, "SuperPMI assertion '%s' failed (" #msg ")", #expr, ##__VA_ARGS__);
+ LogException(exCode, "SuperPMI assertion '%s' failed (" msg ")", #expr, ##__VA_ARGS__);
Currently it is stringizing the format string, which is almost certainly not correct.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense. Updated.
Maybe it should be just removed as in #90711 (comment) ? Presumably the same assert in many other JIT-EE functions will fail too (but they don't have it) |
Removing the assert in |
@@ -2365,7 +2365,7 @@ void MethodContext::recGetHelperFtn(CorInfoHelpFunc ftnNum, void** ppIndirection | |||
DLDL oldValue = GetHelperFtn->Get(key); | |||
|
|||
AssertCodeMsg(oldValue.A == value.A && oldValue.B == oldValue.B, EXCEPTIONCODE_MC, | |||
"collision! old: %016" PRIX64 " %016" PRIX64 ", new: %016" PRIX64 " %016" PRIX64 " \n", oldValue.A, oldValue.B, value.A, | |||
"collision! old: %016" PRIX64 " %016" PRIX64 ", new: %016" PRIX64 " %016" PRIX64, oldValue.A, oldValue.B, value.A, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Asserts shouldn't have newlines in them
We can't use string concatenation in an argument to the
AssertCodeMsg
macro, so construct the string we want to print first.