asdf icon indicating copy to clipboard operation
asdf copied to clipboard

Problems with building in '--combined' mode

Open cyrusmsk opened this issue 2 years ago • 4 comments

If I add asdf to the empty dub project and run 'dub build' - it builds fine. But when I use 'dub build --combined' it gives me errors:

.dub/packages/mir-core-1.3.15/mir-core/source/mir/algebraic.d(1473,36): Error: pure function mir.algebraic.Algebraic!opEquals!().opEquals cannot call impure function mir.annotated.U!(Algebraic!(Ion_)).Annotated.opEquals .dub/packages/mir-core-1.3.15/mir-core/source/mir/algebraic.d(1473,36): Error: @nogc function mir.algebraic.Algebraic!opEquals!().opEquals cannot call non-@nogc function mir.annotated.U!(Algebraic!(Ion_)).Annotated.opEquals .dub/packages/mir-core-1.3.15/mir-core/source/mir/algebraic.d(1473,36): Error: function mir.annotated.U!(Algebraic!.opEquals is not nothrow .dub/packages/mir-core-1.3.15/mir-core/source/mir/algebraic.d(1428,10): Error: function mir.algebraic.Algebraic!(Ion_).s!().opEquals may throw but is marked as nothrow .dub/packages/mir-algorithm-3.18.4/mir-algorithm/source/mir/annotated.d(69,54): Error: template instance mir.algebraic.Algebraic.opEquals!() error instantiating .dub/packages/mir-core-1.3.15/mir-core/source/mir/internal/meta.d(411,39): instantiated from here: U!(Algebraic!.dub/packages/mir-core-1.3.15/mir-core/source/mir/algebraic.d(857,36): 12 recursive instantiations from here: s!(isVariant, This, Algebraic!(Ion_), typeof(null), bool, long, double, string, Blob, Clob, Timestamp, This[], StringMap!!(This)) .dub/packages/mir-algorithm-3.18.4/mir-algorithm/source/mir/algebraic_alias/ion.d(60,22): instantiated from here: Algebraic!(Ion_)

Is it possible to fix that? So we can use asdf in '--combined' build?

cyrusmsk avatar Jan 24 '23 12:01 cyrusmsk

How crucial is present the opEquals function as 'pure nothrow @nogc' for the project?

When I removed it in mir-core/algebraic.d and in mir-algorithm/string_map.d - my simple example with asdf was successfully compiled with 'dub build --combined'. But I don't know if it will cause any problems in other code.

Why I need '--combined' flag? It is because p0nce said, that without it the code generation from intel-intrinsics library is not working properly.

cyrusmsk avatar Jan 25 '23 14:01 cyrusmsk

That is a compiler bug. I don't know what we can do about that.

9il avatar Jan 26 '23 06:01 9il

As a workaround solution it is possible to add 'pure nothrow @nogc' to opEquals implementation in mir-algorithm/annotated.d

cyrusmsk avatar Jan 26 '23 15:01 cyrusmsk

Unfortunately, no, because it is a generic type, and underlaying may not satisfy the attributes.

9il avatar Jan 26 '23 18:01 9il