digitalmars.D.bugs - [Issue 17772] New: Wrong C++ mangled names for templated functions
- via Digitalmars-d-bugs (58/58) Aug 21 2017 https://issues.dlang.org/show_bug.cgi?id=17772
https://issues.dlang.org/show_bug.cgi?id=17772 Issue ID: 17772 Summary: Wrong C++ mangled names for templated functions Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: ilyayaroshenko gmail.com //////////////////// //////////////////// _Z3fooIiEiv (D) vs _ZN5SPACE3fooIiEET_v(C++) _Z4foo2IiEiv(D) vs _Z4foo2IiET_v (C++) //////////////////// //////////////////// ////////////// D DMD64 D Compiler v2.076.0-b1-dirty ``` extern(C++, SPACE) T foo(T)(){ T t; return t;} extern(C++) T foo2(T)(){ T t; return t;} pragma(msg, mangledName!(foo!int)); pragma(msg, mangledName!(foo2!int));``` output: _Z3fooIiEiv _Z4foo2IiEiv ////////////// C++ (clang++ for macos and linux) ``` namespace SPACE { template<class T> T foo() { T t; return t;} int bar(){ return foo<int>(); } } template<class T> T foo2() { T t; return t;} int bar2(){ return foo2<int>(); } ``` clang++ -emit-llvm -S -std=c++14 test_exc.cpp output: ; Function Attrs: nounwind ssp uwtable %1 = alloca i32, align 4 %2 = load i32, i32* %1, align 4 ret i32 %2 } ; Function Attrs: nounwind ssp uwtable %1 = alloca i32, align 4 %2 = load i32, i32* %1, align 4 ret i32 %2 } --
Aug 21 2017