Toolset update: VS 2022 17.0 Preview 2#2064
Conversation
"EDG x64 is confused by overloads for __cdecl and __vectorcall PMFs"
"EDG x64 ICE with negative pointer indexing"
…XPR20, no manual changes.
a8efeb3 to
bf08971
Compare
| @@ -1621,31 +1619,31 @@ namespace ranges { | |||
| requires constructible_from<iter_value_t<_Out>, iter_rvalue_reference_t<_It>> | |||
| uninitialized_move_result<_It, _Out> _Uninitialized_move_unchecked( | |||
| _It _IFirst, _Se _ILast, _Out _OFirst, _OSe _OLast) { | |||
There was a problem hiding this comment.
Consider removing the extra level of indent from here through 1646, removing the // on 1625, and simply wrapping this entire function definition in // clang-format off.
There was a problem hiding this comment.
Aha! This is another case where clang-format is confused by a requires-clause without parentheses. If I add them, it formats the rest of the function nicely (except that it omits a space and says requires(constructible_from, and still needs help wrapping the if constexpr variable template usage).
I'll do this in a followup PR, thanks.
|
|
||
| #if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1347136 | ||
| private: | ||
| private : |
There was a problem hiding this comment.
That one is also really bad
There was a problem hiding this comment.
It was worse without adding the following newline: 😹
private : template <class _Left, class _Right>
static constexpr bool _Nothrow_plus_equal =
noexcept(_STD declval<_Left&>() += _STD declval<const _Right&>());As I mentioned in the changelog, I thought that this single space was tolerable (especially because it's in a compiler workaround that should be removed someday). Let me know if you'd rather disable clang-format here.
There was a problem hiding this comment.
I'll go ahead and disable clang-format here in a followup PR.
.clang-formatfor Clang 12.IndentRequirestotrue, which is our preferred convention.<algorithm>,indirectly_copyable_storablewould be formatted weirdly, so I'm disabling clang-format and manually adjusting the indentation to be more preferred.requires TRAIT<_Ty> = default;would be formatted weirdly. Instead of adding parentheses aroundTRAIT<_Ty>, I'm disabling clang-format./* strengthened */ requires TRAIT<_Ty> {would be formatted weirdly. This can be avoided by using a C++ comment, forcing clang-format to putrequires TRAIT<_Ty> {on the next line.// clang-format off- it gets confused about the level of indentation and damages the rest of the file. We need to add parentheses in order to avoid this.<ranges>, we need to add a blank line before_Nothrow_plus_equalto avoid weird damage. (Immediately above, clang-format will still changeprivate:toprivate :. This seemed like a tolerable amount of weirdness for a block of code that's a TRANSITION workaround, and not worth disabling clang-format entirely.)<utility>, clang-format has trouble with our strange-looking definitions ofmaxandmin. Forcing wrapping with empty comments is sufficient.tests/std/tests/P0088R3_variant/test.cpp, clang-format wants to coalesce and sort the Standard and libcxx headers (because the latter don't have an extension of.hpp). Adding a comment both prevents this, and explains where these headers are from.(_STD min) (_Num1, _Num2)because it's seeing a C-style cast. (Attempting to change that setting would affect way more lines, due to our(void)casts.)__cdecland__vectorcallPMFs"./BEand doesn't affect the IDE. This workaround is equally specific, so we don't have to worry about IntelliSense misbehaving if someone is using a non-default calling convention.constexprcontainers (stringandvector) for Clang._Alloc_temporary, where an old workaround (_Wrap) for C++/CX was incompatible with Clang 12's strict enforcement ofconstexprrules. Because C++/CX excludes C++20, we can make_Wrapspecific to C++/CX, so C++20constexprwon't attempt to activate a union member by initializing a sub-object. Then, adding_Get_value()insulates the rest of the library from caring about this._Alloc_temporary2for ABI safety.__cpp_constexpr_dynamic_alloc, so we can always define the Library macros__cpp_lib_constexpr_dynamic_alloc/__cpp_lib_constexpr_string/__cpp_lib_constexpr_vectorin C++20 mode.tests/std/tests/P0896R4_views_join/test.cppwas using#ifndefand has been modified accordingly._CONSTEXPR20_DYNALLOC/_CONSTEXPR20_CONTAINERtoconstexpr._CONSTEXPR20_DYNALLOC/_CONSTEXPR20_CONTAINERwith_CONSTEXPR20, no manual changes.return X op= Y;toX op= Y; return X;for NRVO.<bitset>and<filesystem>for NRVO.<atomic>for Clang 11 targeting ARM64.is_constructible_v<int const&, ExplicitTo<int&&>>"is_constructible_v<int const&, ExplicitTo<int&&>>"/BEis unsupported for x86.error: unused variable 'citer' [-Werror,-Wunused-variable].#ifdef __cpp_lib_constexpr_dynamic_alloc=>#if _HAS_CXX20#ifdef __cpp_lib_constexpr_string=>#if _HAS_CXX20#ifdef __cpp_lib_destroying_delete=>#if _HAS_CXX20#ifdef __cpp_lib_is_constant_evaluated=>#if _HAS_CXX20#ifdef __cpp_lib_variant=>#if _HAS_CXX17VsDevCmd.batpaths./BEnow).--allow-unsupported-compilerto CUDA, because CUDA 10.1 Update 2 rejected VS 2022 as unsupported Future Technology.-Wignored-pragmas(for ARM64).warning: '#pragma float_control' is not supported on this target - ignored [-Wignored-pragmas]