On Mon, 25 Apr 2011 14:07:28 -0400, Mandeep <mand...@brars.co.in> wrote:
On 04/25/2011 07:56 PM, Steven Schveighoffer wrote:
On Sat, 23 Apr 2011 02:16:22 -0400, Mandeep <mand...@brars.co.in> wrote:
Hi,
I am trying to compile the code that was working with dmd 2.050 using
dmd 2.052.
The code compiles but it gives me errors with message when trying to
run:
Cycle detected between modules with ctors/dtors
The cyclic module import code was changed significantly in 2.051, due to
this bug:
http://d.puremagic.com/issues/show_bug.cgi?id=4384
I would appreciate if you think the cycle is not correct to post a case
of where cycle detection is flagging a cycle that shouldn't be
considered a cycle.
-Steve
The cases i could find were pieces of bigger codebase with cycles
coming out of more than 4-5 files with lot of code. I tried to repeat
the code sequence with a couple of files with simplistic function but
was not able to come out with a smaller test case for the above. Would
try to come up with a test case again if i can. But i think moving
around the code from static constructors as suggested in an earlier post
in the thread helped.
Also, I think that the cyclic const/dest have a problem, because the
same code was working find with 2.050.
The cyclic check is conservative, there is a very good possibility that
the cyclic dependency does not alter the execution of the code at all. So
just because the code runs correctly does not mean that there is not a
cycle. All the cycle checker does is guarantee that the static
constructors/destructors are executed in a sane order. The compiler
doesn't give enough info (and can't AFAIK) to tell if the cycle is harmful
or not.
But if the cycle checker is identifying a cycle where there isn't one, I
want to fix that. It should be simple to verify, just follow the path
listed in the exception and see if the cycle does exist. If this is an
error, you can email me privately, and I can help you reduce the test case.
Another bit of diff from my older scenario is that 2.050 was on 32 bit
and i am using -m64 with 2.052, which i am not sure should be a problem.
Although I have not tested the 64-bit compiler (not having a 64-bit linux
box), I believe that the cyclic import check is the same.
-Steve