Skip to content

EDG tracking issue #1621

Description

Reported

Need to report

We have workarounds for the following bugs, which we should reduce to be library-free and report to the edgcpp/compiler repo.

VSO-1951821 EDGcpfe/27063 EDG instantiates the wrong overload of promise_type::operator new for generator machinery

#ifndef __EDG__ // TRANSITION, VSO-1951821
{
auto g = [](allocator_arg_t, StatefulAlloc<int>, const int hi) -> generator<int, int, StatefulAlloc<char>> {
constexpr size_t n = 64;
int some_ints[n];
for (int i = 0; i < hi; ++i) {
co_yield some_ints[i % n] = i;
}
};
test_one<gen_traits<int, int, StatefulAlloc<char>>, int, int, int>(
g(allocator_arg, StatefulAlloc<int>{42}, 1024), views::iota(0, 1024));
}
#endif // ^^^ no workaround ^^^

Modules

There are an unknown number of blocking issues for EDG consuming header units and named modules. Currently, EDG coverage is disabled in the header units test, and hasn't been added to the named modules test.

Fixed, need to remove workarounds

  • VSO-2931699 EDG should support if consteval downlevel in C++20 mode for parity with C1XX/Clang
    • Fixed by VS-PR-737109 on 2026-05-12. We probably can't remove workarounds until CUDA gets this.

Activity

  1. StephanTLavavej commented on Feb 17, 2022

    @StephanTLavavej
    Author
  2. cpplearner commented on Oct 8, 2023

    @cpplearner
  3. cpplearner commented on Oct 8, 2023

    @cpplearner
  4. cpplearner commented on Oct 8, 2023

    @cpplearner
  5. cpplearner commented on Oct 8, 2023

    @cpplearner
  6. cpplearner commented on Oct 8, 2023

    @cpplearner
  7. cpplearner commented on Oct 9, 2023

    @cpplearner
  8. cpplearner commented on Oct 9, 2023

    @cpplearner
  9. StephanTLavavej commented on Oct 10, 2023

    @StephanTLavavej
    Author
  10. cpplearner commented on Oct 10, 2023

    @cpplearner
  11. cpplearner commented on Oct 10, 2023

    @cpplearner
  12. cpplearner commented on Oct 11, 2023

    @cpplearner
  13. StephanTLavavej commented on Oct 12, 2023

    @StephanTLavavej
    Author
  14. cpplearner commented on Oct 12, 2023

    @cpplearner
  15. cpplearner commented on Jan 5, 2024

    @cpplearner
  16. cpplearner commented on Jan 5, 2024

    @cpplearner
  17. CaseyCarter commented on Jan 18, 2024

    @CaseyCarter
  18. CaseyCarter commented on Jan 23, 2024

    @CaseyCarter
  19. cpplearner commented on Feb 3, 2024

    @cpplearner
  20. StephanTLavavej commented on Feb 5, 2024

    @StephanTLavavej
    Author
  21. changed the title [-]Report EDG concepts bugs[/-] [+]Report EDG bugs[/+] on Apr 2, 2024
  22. cpplearner commented on Oct 1, 2026

    @cpplearner
  23. changed the title [-]Report EDG bugs[/-] [+]EDG tracking issue[/+] on Oct 9, 2026
  24. cpplearner commented on Oct 11, 2026

    @cpplearner
    Contributor

    Reduced testcase for join constexpr string. It differs from Casey Carter's repro for VSO-1948896 EDGcpfe/27054 only in the definition and use of the assignment operator.

    namespace std {
        struct string;
    
        struct _Container_proxy { const string* _Mycont; };
    
        struct _Iterator_base {
            constexpr _Iterator_base& operator=(const _Iterator_base& _Right) {
                _Myproxy = _Right._Myproxy;
    
                return *this;
            }
    
            _Container_proxy* _Myproxy;
        };
    
        struct iterator : _Iterator_base {
            const char* _Ptr = nullptr;
    
            constexpr void operator*() const;
        };
    
        union _Bxty { char _Buf[16]{}; };
    
        struct string {
            constexpr string() : _Myproxy{new _Container_proxy{this}} {}
    
            string(const string&) = delete;
            string& operator=(const string&) = delete;
    
            constexpr ~string() { delete _Myproxy; }
    
            constexpr iterator cbegin() const {
                return iterator{_Myproxy, _Bx._Buf};
            }
    
            _Container_proxy* _Myproxy;
            _Bxty _Bx;
        };
    
        constexpr void iterator::operator*() const {
            auto _Contptr = _Myproxy->_Mycont;
            (void)(_Ptr < _Contptr->_Bx._Buf + 4);
        }
    } // namespace std
    
    constexpr bool test() {
        union string_holder {
            constexpr ~string_holder() { s.~string(); }
            std::string s{};
        };
        string_holder sh;
        std::iterator it;
        it = sh.s.cbegin();
        *it;
        return true;
    }
    
    static_assert(test());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    compilerCompiler work involvedhelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions