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

Avoid using MSVC-internal _STRINGIZE #6970

Merged
merged 1 commit into from
Jul 3, 2024
Merged

Avoid using MSVC-internal _STRINGIZE #6970

merged 1 commit into from
Jul 3, 2024

Conversation

StephanTLavavej
Copy link
Contributor

I work on Microsoft's C++ Standard Library implementation, where we recently merged microsoft/STL#4405 to remove our internal _STRINGIZE macro. Our "Real World Code" test suite, which builds popular open-source projects like yours, found that you were using this MSVC-internal macro and therefore our change broke your code.

The C++ Standard's rule is that _Leading_underscore_capital identifiers (including _LEADING_UNDERSCORE_ALL_CAPS) are reserved for the compiler and Standard Library, so other libraries and applications should avoid using such reserved identifiers. This is N4971 5.10 [lex.name]/3:

In addition, some identifiers appearing as a token or preprocessing-token are reserved for use by C++ implementations and shall not be used otherwise; no diagnostic is required.
— Each identifier that contains a double underscore __ or begins with an underscore followed by an uppercase letter is reserved to the implementation for any use.

This PR introduces non-reserved names that will work on all platforms.

vicroms pushed a commit to microsoft/vcpkg that referenced this pull request Mar 8, 2024
Microsoft's C++ standard library recently merged microsoft/STL#4405 to
remove the internal `_STRINGIZE` macro. `chakracore` was using this MSVC
internal macro, so `avoid_msvc_internal_STRINGIZE.patch` was added to
adapt it to the microsoft/STL changes. Reference:
chakra-core/ChakraCore#6970.

- [x] Changes comply with the [maintainer
guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md).
- [ ] ~SHA512s are updated for each updated download.~
- [ ] ~The "supports" clause reflects platforms that may be fixed by
this new version.~
- [ ] ~Any fixed [CI
baseline](https://github.com/microsoft/vcpkg/blob/master/scripts/ci.baseline.txt)
entries are removed from that file.~
- [ ] ~Any patches that are no longer applied are deleted from the
port's directory.~
- [x] The version database is fixed by rerunning `./vcpkg x-add-version
--all` and committing the result.
- [x] Only one version is added to each modified port's versions file.

---------

Co-authored-by: Monica <[email protected]>
@rhuanjl
Copy link
Collaborator

rhuanjl commented Apr 23, 2024

Hi @StephanTLavavej thank you for the heads up about this pending breakage.

Looking at the code it looks to me like only bin/NativeTests/stdafx.h would be broken and the other two instances whilst using a similar name already defined alternative macros; is that correct? Did you rename the others for consistency?

@StephanTLavavej
Copy link
Contributor Author

Yes, I renamed them to consistently follow the Standard's rules for reserved identifiers, and to make it easier to verify that there are no remaining dependencies on microsoft/STL's removed macro.

bhmohanr-techie added a commit to bhmohanr-techie/ChakraCore that referenced this pull request Jul 2, 2024
Avoid using MSVC-internal _STRINGIZE chakra-core#6970

Below is the comment from
Stephan T. Lavavej in the above mentioned pull request:

"I work on Microsoft's C++ Standard Library implementation, where we recently merged microsoft/STL#4405 to remove our internal _STRINGIZE macro. Our "Real World Code" test suite, which builds popular open-source projects like yours, found that you were using this MSVC-internal macro and therefore our change broke your code.

The C++ Standard's rule is that _Leading_underscore_capital identifiers (including _LEADING_UNDERSCORE_ALL_CAPS) are reserved for the compiler and Standard Library, so other libraries and applications should avoid using such reserved identifiers. This is N4971 5.10 [lex.name]/3:

In addition, some identifiers appearing as a token or preprocessing-token are reserved for use by C++ implementations and shall not be used otherwise; no diagnostic is required.
— Each identifier that contains a double underscore __ or begins with an underscore followed by an uppercase letter is reserved to the implementation for any use.

This PR introduces non-reserved names that will work on all platforms."
@ppenzin ppenzin merged commit 13358c6 into chakra-core:master Jul 3, 2024
24 checks passed
@StephanTLavavej StephanTLavavej deleted the stringize branch July 3, 2024 22:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants