libmir / asdf

JSON library
http://asdf.libmir.org
Boost Software License 1.0
20 stars 8 forks source link

Problems with building in '--combined' mode #23

Open cyrusmsk opened 1 year ago

cyrusmsk commented 1 year ago

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/algebraicalias/ion.d(60,22): instantiated from here: `Algebraic!(Ion)`

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

cyrusmsk commented 1 year ago

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.

9il commented 1 year ago

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

cyrusmsk commented 1 year ago

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

9il commented 1 year ago

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