-
Notifications
You must be signed in to change notification settings - Fork 102
Simplify the thunk names we generate for test functions. #750
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
Conversation
Parameterized test functions with the same name but different argument types currently get the same generated names from swift-syntax, so we do some additional decorating to ensure uniqueness. This results in very long symbol names that `swift-demangle` has trouble with. This PR changes the decorating formula. Previously, we would include a copy of the test function's signature (stripped of whitespace, Unicode, and non-identifier-friendly ASCII) and, if the identifier contained non-ASCII characters, the CRC32 of the identifier for further uniqueness. This change drops the copy of the identifier name and always includes the CRC32. Collisions are only possible for fully-qualified test function names that are _identical_, and I naïvely judge the risk of those collisions to be sufficiently low that we can make this change. For `ZipTests.allElementsEqual😀(i:j:)`` we currently generate a thunk named: ``` $s12TestingTests03ZipB0V0022allElementsEqual_oxFJo4TestfMp_43funcallElementsEqual__i_Int_j_Int__5bcb7b35fMu_ ``` This change would change it to: ``` $s12TestingTests03ZipB0V0022allElementsEqual_oxFJo4TestfMp_9Z5bcb7b35fMu_ ``` The benefit of the change is that the generated names are shorter and easier to read when expanding a macro. There may also be some benefit on Windows where the linker has a 65KB symbol name cap, although we're not exporting these symbols so probably not.
@swift-ci test |
@swift-ci test |
@swift-ci test Windows |
@stmontgomery previously gave me a thumbs-up on the concept of the change, though not the diff itself. |
Is there some bug there that needs to be reported? |
I don't think so. It's not a bug with |
Parameterized test functions with the same name but different argument types currently get the same generated names from swift-syntax, so we do some additional decorating to ensure uniqueness. This results in very long symbol names that
swift-demangle
has trouble with.This PR changes the decorating formula. Previously, we would include a copy of the test function's signature (stripped of whitespace, Unicode, and non-identifier-friendly ASCII) and, if the identifier contained non-ASCII characters, the CRC32 of the identifier for further uniqueness. This change drops the copy of the identifier name and always includes the CRC32. Collisions are only possible for fully-qualified test function names that are identical, and I naïvely judge the risk of those collisions to be sufficiently low that we can make this change.
For
ZipTests.allElementsEqual😀(i:j:)
we currently generate a thunk named:This change would change it to:
Which demangles to:
The benefit of the change is that the generated names are shorter and easier to read when expanding a macro, and play better with the demangler. There may also be some benefit on Windows where the linker has a 65KB symbol name cap, although we're not exporting these symbols so probably not.
Checklist: