Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
December 28, 2016 ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
Here's a minimal example: void r(T...)(T args) {} extern (C++) { void s(T...)(T args) { r(args); } } void main() { s(0); } Traceback from GDC: cc1d: ../../gcc-6.3.0/gcc/d/dfrontend/cppmangle.c:185: void CppMangleVisitor::source_name(Dsymbol*, bool): Assertion `t' failed. minim.d: In function ‘D main’: minim.d:9:2: internal compiler error: Aborted s(0); ^ 0xb91c3f crash_signal ../../gcc-6.3.0/gcc/toplev.c:333 0x5f4f26 CppMangleVisitor::source_name(Dsymbol*, bool) ../../gcc-6.3.0/gcc/d/dfrontend/cppmangle.c:185 0x5f0b82 CppMangleVisitor::mangle_function(FuncDeclaration*) ../../gcc-6.3.0/gcc/d/dfrontend/cppmangle.c:462 0x5f0b82 CppMangleVisitor::mangleOf(Dsymbol*) ../../gcc-6.3.0/gcc/d/dfrontend/cppmangle.c:575 0x5f0b82 toCppMangle(Dsymbol*) ../../gcc-6.3.0/gcc/d/dfrontend/cppmangle.c:910 0x67ba17 Mangler::visit(Declaration*) ../../gcc-6.3.0/gcc/d/dfrontend/mangle.c:421 0x67a2f8 mangleExact(FuncDeclaration*) ../../gcc-6.3.0/gcc/d/dfrontend/mangle.c:877 0x6ed183 get_symbol_decl(Declaration*) ../../gcc-6.3.0/gcc/d/d-decls.cc:164 0x72ab78 ExprVisitor::visit(VarExp*) ../../gcc-6.3.0/gcc/d/expr.cc:2062 0x7298ef build_expr(Expression*, bool) ../../gcc-6.3.0/gcc/d/expr.cc:2851 0x72b759 ExprVisitor::visit(CallExp*) ../../gcc-6.3.0/gcc/d/expr.cc:1633 0x7298ef build_expr(Expression*, bool) ../../gcc-6.3.0/gcc/d/expr.cc:2851 0x729a5f build_expr_dtor(Expression*) ../../gcc-6.3.0/gcc/d/expr.cc:2895 0x731d7c IRVisitor::visit(ExpStatement*) ../../gcc-6.3.0/gcc/d/toir.cc:649 0x731bf8 IRVisitor::visit(CompoundStatement*) ../../gcc-6.3.0/gcc/d/toir.cc:665 0x731b95 build_ir(FuncDeclaration*) ../../gcc-6.3.0/gcc/d/toir.cc:1037 0x706d84 FuncDeclaration::toObjFile() ../../gcc-6.3.0/gcc/d/d-objfile.cc:1359 0x7083a4 Module::genobjfile(bool) ../../gcc-6.3.0/gcc/d/d-objfile.cc:1465 0x6e7f22 d_parse_file() ../../gcc-6.3.0/gcc/d/d-lang.cc:1215 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. |
December 31, 2016 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Elronnd | On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com> wrote:
> Here's a minimal example:
>
> void r(T...)(T args) {}
>
> extern (C++) {
> void s(T...)(T args) { r(args); }
> }
>
> void main() {
> s(0);
> }
>
It seems the bug is also in dmd too? Unless it is fixed in master/latest release, in which case will need to find out when this happened.
|
January 08, 2017 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Iain Buclaw | On Saturday, 31 December 2016 at 15:10:36 UTC, Iain Buclaw wrote:
> On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com> wrote:
> *snip*
> It seems the bug is also in dmd too? Unless it is fixed in master/latest release, in which case will need to find out when this happened.
It works fine for me on dmd.
|
January 08, 2017 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Elronnd | On 8 January 2017 at 09:08, Elronnd via D.gnu <d.gnu@puremagic.com> wrote:
> On Saturday, 31 December 2016 at 15:10:36 UTC, Iain Buclaw wrote:
>>
>> On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com>
>> wrote:
>> *snip*
>> It seems the bug is also in dmd too? Unless it is fixed in master/latest
>> release, in which case will need to find out when this happened.
>
>
> It works fine for me on dmd.
Then the version of dmd I have probably isn't new enough then. If the latest is fine, then the C++ mangler just needs to be sync'd between the two codebases. It's totally encapsulated, so is relatively straightforward, once you get over the D -> C++ conversion. ;-)
|
January 08, 2017 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
On 8 January 2017 at 11:06, Iain Buclaw <ibuclaw@gdcproject.org> wrote: > On 8 January 2017 at 09:08, Elronnd via D.gnu <d.gnu@puremagic.com> wrote: >> On Saturday, 31 December 2016 at 15:10:36 UTC, Iain Buclaw wrote: >>> >>> On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com> >>> wrote: >>> *snip* >>> It seems the bug is also in dmd too? Unless it is fixed in master/latest >>> release, in which case will need to find out when this happened. >> >> >> It works fine for me on dmd. > > Then the version of dmd I have probably isn't new enough then. If the latest is fine, then the C++ mangler just needs to be sync'd between the two codebases. It's totally encapsulated, so is relatively straightforward, once you get over the D -> C++ conversion. ;-) Looks like this is the related bug in DMD: https://issues.dlang.org/show_bug.cgi?id=15372 |
January 08, 2017 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
On 8 January 2017 at 16:42, Iain Buclaw <ibuclaw@gdcproject.org> wrote: > On 8 January 2017 at 11:06, Iain Buclaw <ibuclaw@gdcproject.org> wrote: >> On 8 January 2017 at 09:08, Elronnd via D.gnu <d.gnu@puremagic.com> wrote: >>> On Saturday, 31 December 2016 at 15:10:36 UTC, Iain Buclaw wrote: >>>> >>>> On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com> >>>> wrote: >>>> *snip* >>>> It seems the bug is also in dmd too? Unless it is fixed in master/latest >>>> release, in which case will need to find out when this happened. >>> >>> >>> It works fine for me on dmd. >> >> Then the version of dmd I have probably isn't new enough then. If the latest is fine, then the C++ mangler just needs to be sync'd between the two codebases. It's totally encapsulated, so is relatively straightforward, once you get over the D -> C++ conversion. ;-) > > Looks like this is the related bug in DMD: https://issues.dlang.org/show_bug.cgi?id=15372 Actually, no. It's this bug that is related indirectly, as the C++ mangler sees a Tuple parameter '[int]', but with the patch applied, it flattens all tuples so we are just left with the Type 'int'. https://issues.dlang.org/show_bug.cgi?id=7469 |
January 08, 2017 Re: ICE when calling templated function from extern (C++) templated function? | ||||
---|---|---|---|---|
| ||||
On 8 January 2017 at 18:23, Iain Buclaw <ibuclaw@gdcproject.org> wrote: > On 8 January 2017 at 16:42, Iain Buclaw <ibuclaw@gdcproject.org> wrote: >> On 8 January 2017 at 11:06, Iain Buclaw <ibuclaw@gdcproject.org> wrote: >>> On 8 January 2017 at 09:08, Elronnd via D.gnu <d.gnu@puremagic.com> wrote: >>>> On Saturday, 31 December 2016 at 15:10:36 UTC, Iain Buclaw wrote: >>>>> >>>>> On 28 December 2016 at 07:51, Elronnd via D.gnu <d.gnu@puremagic.com> >>>>> wrote: >>>>> *snip* >>>>> It seems the bug is also in dmd too? Unless it is fixed in master/latest >>>>> release, in which case will need to find out when this happened. >>>> >>>> >>>> It works fine for me on dmd. >>> >>> Then the version of dmd I have probably isn't new enough then. If the latest is fine, then the C++ mangler just needs to be sync'd between the two codebases. It's totally encapsulated, so is relatively straightforward, once you get over the D -> C++ conversion. ;-) >> >> Looks like this is the related bug in DMD: https://issues.dlang.org/show_bug.cgi?id=15372 > > Actually, no. It's this bug that is related indirectly, as the C++ mangler sees a Tuple parameter '[int]', but with the patch applied, it flattens all tuples so we are just left with the Type 'int'. > > https://issues.dlang.org/show_bug.cgi?id=7469 But of course there's a bug in the patch! https://issues.dlang.org/show_bug.cgi?id=15789 |
Copyright © 1999-2021 by the D Language Foundation