www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20336] New: Regression (2.088.1) C++ mangling problem with

https://issues.dlang.org/show_bug.cgi?id=20336

          Issue ID: 20336
           Summary: Regression (2.088.1) C++ mangling problem with
                    multiple const ref parameters
           Product: D
           Version: D2
          Hardware: x86
                OS: Mac OS X
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: andrej.mitrovich gmail.com

cpp.cpp:
-----
struct Value { };

void one (Value const& a)
{
}

void two (Value const& a, Value const& b)
{
}
-----

test.d:
-----
struct Value { }

extern(C++) void one(ref const(Value) a);
extern(C++) void two(ref const(Value) a, ref const(Value) b);

void main ()
{
    Value value;
    one(value);
    two(value, value);  // linker error with 2.088.1
}
-----

2.088.1:

-----
$ g++ -c -g -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14 cpp.cpp
$ rdmd --force -L-lstdc++ -vcolumns cpp.o test.d

Undefined symbols for architecture x86_64:
  "two(Value const&, Value const)", referenced from:
      __Dmain in test.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: linker exited with status 1
-----

Works ok with 2.088.0

--
Oct 29 2019