Skip to content
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

Merged
merged 2 commits into from
Aug 18, 2023

Conversation

BruceForstall
Copy link
Member

We can't use string concatenation in an argument to the AssertCodeMsg macro, so construct the string we want to print first.

We can't use string concatenation in an argument to the `AssertCodeMsg`
macro, so construct the string we want to print first.
@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Aug 18, 2023
@ghost ghost assigned BruceForstall Aug 18, 2023
@ghost
Copy link

ghost commented Aug 18, 2023

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We can't use string concatenation in an argument to the AssertCodeMsg macro, so construct the string we want to print first.

Author: BruceForstall
Assignees: -
Labels:

area-CodeGen-coreclr

Milestone: -

@BruceForstall
Copy link
Member Author

@jakobbotsch PTAL
cc @dotnet/jit-contrib

@BruceForstall
Copy link
Member Author

Related: #90711

Comment on lines 2367 to 2371
// 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);
Copy link
Member

@jakobbotsch jakobbotsch Aug 18, 2023

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.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. Updated.

@EgorBo
Copy link
Member

EgorBo commented Aug 18, 2023

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)

@BruceForstall
Copy link
Member Author

Maybe it should be just removed...

Removing the assert in recGetHelperFtn is a separate question. This PR just fixes how the asserts are implemented.

@@ -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,
Copy link
Member Author

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

@BruceForstall BruceForstall merged commit 028ad32 into dotnet:main Aug 18, 2023
@BruceForstall BruceForstall deleted the FixSpmiAssert branch August 18, 2023 18:36
@ghost ghost locked as resolved and limited conversation to collaborators Sep 17, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants