Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # 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 <v-liumonica@microsoft.com>
@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
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants