microsoft / microsoft/STL

`/clr` tracking issue

Open
#3,193 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

compiler
Dominant language
C++
Stars
11.1k
Forks
1.7k
Avg merge
4d 15h
Merged PRs (30d)
22

Description

This issue tracks /clr compiler bugs that we need fixes for.

/clr /std:c++20 was first supported (excluding modules) in VS 2022 17.6.

Legend

  • ๐Ÿ“ฆ Not reduced, preprocessed repro
  • ๐Ÿ˜ธ Semi-reduced, pruned unnecessary test code
  • ๐Ÿ’š Fully reduced, library-free repro

Product Code Workarounds

  • ๐Ÿ’š VSO-1153256 Issue: [[msvc::noop_dtor]] doesn't seem to work for /clr
  • ๐Ÿ˜ธ VSO-1663104 /clr rejects the __ceilf/__floorf intrinsics with error LNK2020/LNK2001 instead of accepting or falling back to native codegen
  • ๐Ÿ“ฆ VSO-1665606 /clr C++20 backend ICE with counted_iterator's _Same_sequence
  • ๐Ÿ˜ธ VSO-2457624 /clr /std:c++20 silent bad codegen with the __fastfail intrinsic

Test Code Workarounds

  • ๐Ÿ˜ธ VSO-1659383 /clr atomic and thread emit error C2711 "this function cannot be compiled as managed" instead of falling back to native codegen
  • ๐Ÿ˜ธ VSO-1659496 /clr emits bogus error C2079 "uses undefined struct 'Incomplete'" despite std::variant's ADL defenses
  • ๐Ÿ˜ธ VSO-1659511 /clr runtime hang when calling std::async in a global variable's constructor
  • ๐Ÿ˜ธ VSO-1664341 /clr C++20 System.NullReferenceException when calling ranges algorithms with PMD projections
  • ๐Ÿ“ฆ VSO-1664382 /clr C++20 emits bogus error C2127 "illegal initialization of 'constinit' entity with a non-constant expression"
  • ๐Ÿ’š VSO-1665481 /clr C++20 silent bad codegen for complex<float> division
  • ๐Ÿ“ฆ VSO-1665670 /clr C++20 incorrectly reports input_iterator etc. concepts as being true for 'bad' iterators
  • ๐Ÿ“ฆ VSO-1665674 /clr C++20 has incorrect results for various ranges concepts in P0896R4_ranges_iterator_machinery
  • ๐Ÿ˜ธ VSO-1666161 /clr C++20 silent bad codegen for bit_cast<float>(nan_uint)
  • ๐Ÿ’š VSO-1666178 /clr C++20 x64 /O2 backend assertion SY_ISUSERVAR(sym) || SY_ISARGUMENT(sym)
  • ๐Ÿ’š VSO-1846195 /clr alignas emits fatal error C1193: an error expected in yyaction.cpp(2971) not reached
  • ๐Ÿ˜ธ VSO-1946395 /clr /std:c++20 /Od backend ICE for parallel std::find_end

No Workarounds

  • ๐Ÿ’š VSO-1459687 DevCom-1632617 C++/CLI struct/class doesn't use MarshalCopy
    • Reported in #139.
  • ๐Ÿ’š VSO-2231268 /clr /std:c++20 rejects sneaky technique to access private data members
    • Perma-workaround in #4920.
  • ๐Ÿ’š VSO-2279389 /clr C++20 can't handle struct MoveOnlyFunctor defined in a function template, emitting fatal error C1193: an error expected in yyaction.cpp(2899) not reached
    • Perma-workaround in #4946.
  • ๐Ÿ’š VSO-2616030 /clr /std:c++20 alignas emits bogus error C3645: 'main::<lambda_1>::<lambda_invoker_clrcall>': __clrcall cannot be used on functions compiled to native code
    • Perma-workaround in #5811.

Fixed

  • VSO-1078742 DevCom-939490 Calling a pointer to member function at constexpr time in /clr triggers internal compiler error
  • VSO-1663233 /clr C++20 rejects <coroutine> with error C3861 "'__builtin_coro_done': identifier not found" instead of falling back to native codegen
  • VSO-1680392 Assertion failure: pSTI->length == strlen(pSTI->szName) + 1 under /clr
  • VSO-1595465 /clr /std:c++17 ICE with int = 0 SFINAE
  • VSO-1663257 /clr C++20 rejects P0428R2 Familiar template syntax for generic lambdas
  • VSO-1663301 /clr C++20 emits bogus error C2131 'expression did not evaluate to a constant' when a lambda tests a constexpr variable defined outside
  • VSO-1665663 /clr C++20 source_location has incorrect column information within a lambda
  • VSO-1664463 /clr C++20 alignas emits error C3821 'managed type or function cannot be used in an unmanaged function' instead of falling back to native codegen
  • VSO-1659408 /clr alignas emits error C2711 "this function cannot be compiled as managed" instead of falling back to native codegen
  • VSO-1666180 /clr C++20 x64 System.AccessViolationException with views::iota and views::transform
    • Duplicate: VSO-1659489 /clr System.AccessViolationException with parallel std::mismatch
    • Duplicate: VSO-1867037 /clr C++20 System.AccessViolationException with ranges uninitialized algorithms
  • VSO-1665654 /clr C++20 x86 System.AccessViolationException with atomic<shared_ptr>
  • VSO-1659695 /clr x86 runtime assertions/crashes with parallel algorithms
  • VSO-1658184 /clr silent bad codegen with std::_Signed128 multiplication
  • VSO-1881472 /clr C++20 x86 System.AccessViolationException with atomic<with_padding_bits<8>>
  • VSO-1664293 /clr C++20 chk assertion failed: rhs.is_lvalue() in constexpr.cpp
  • VSO-2417635 /clr C++20 chk assertion failed: rhs.is_lvalue() in constexpr.cpp, again

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up โ€” it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the categorized /clr entries in this issue and selecting one specific open compiler bug rather than treating the tracker as a single task. Check the linked issue references and reproduction status shown in the entry; done means that individual bug is fixed and its tracker status can move to Fixed.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
10/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.