Thread overview
[Issue 18954] extern(C++) ICE when `cppmangle` is used
Jun 08, 2018
Manu
Jul 06, 2018
Mike Franklin
Jul 06, 2018
Manu
Jul 06, 2018
Mike Franklin
Jul 10, 2018
Manu
Jul 10, 2018
Manu
June 08, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

Manu <turkeyman@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |C++, industry

--- Comment #1 from Manu <turkeyman@gmail.com> ---
I don't understand the intent of the code that asserts.
Walter might want to have a look, since he probably understands what the logic
is intended to do?

--
July 06, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

Mike Franklin <slavo5150@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |slavo5150@yahoo.com

--- Comment #2 from Mike Franklin <slavo5150@yahoo.com> ---
I cannot reproduce this on Linux or Windows with 2.081.

--
July 06, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

--- Comment #3 from Manu <turkeyman@gmail.com> ---
I'm pretty sure nobody attempted to fix it...?

--
July 06, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

--- Comment #4 from Mike Franklin <slavo5150@yahoo.com> ---
I attempted to fix it, but couldn't reproduce it, so I don't know what needs to be fixed.

--
July 10, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

--- Comment #5 from Manu <turkeyman@gmail.com> ---
I just tried to repro with 2.081.1b, this issue as logged above seems to be resolved.

This variant persists though:

test.d:
--------------------------------------------------------------
extern (C++, std)
{
        extern (C++, class) struct allocator(T)
        {
        }
        struct char_traits(Char)
        {
        }
        extern (C++, class) struct basic_string(T, Traits, Alloc)
        {
        }
        alias string = basic_string!(char, char_traits!char, allocator!char);
}
extern (C++) void test(ref const(std.string) str) {}
--------------------------------------------------------------

I just removed the explicit `extern(C++, struct)` from the struct. It's declared as a struct, no need to override a struct as struct!

In this code, it gets mangled as a class instead of as a struct, which is incorrect.

This is only relevant on windows, this issue doesn't affect linux (posix mangling doesn't distinguish class/struct).

--
July 10, 2018
https://issues.dlang.org/show_bug.cgi?id=18954

Manu <turkeyman@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #6 from Manu <turkeyman@gmail.com> ---
That still-broken variant is logged as another bug: https://issues.dlang.org/show_bug.cgi?id=18955

This particular one seems to have been fixed... perhaps by accident? O_o I can't find a recent patch that looks like it should have fixed this. Marking as resolved...

--