-
Notifications
You must be signed in to change notification settings - Fork 670
Internal error Broken link in node
#3875
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Note that module mm;
function logic f();
return 0;
endfunction
endmodule
module m;
mm mm1();
if (mm1.f())
$error("ok\n")
endmodule But the bug is probably related to |
When the interface is elaborated it seems to get a confused data type. Needs some more debug - perhaps you'd like to take a look at a pull to fix this? |
I am trying to find the cause for the segfault and have some questions. The segfault happens during My hunch is
Whole stack
After printing the details of
|
A crash in V3Dead or V3Broken often indicates an earlier transform messed something up. A pointer of 0x1 is used in an object that was earlier deleted. So the crash is really that earlier a node was deleted and a pointer still exists to it as you suspected. If you print the broken node (pn node won't work) you should see an editCount you can use to find where it was changed (hopefully), see the internals.txt for more details. Alternatively, use a gdb watchpoint to see where the 0x1 was written and backtrace. |
I got the last edit number of the the
As you mentioned all the tree pointers are set to 0x1. Breaking at the edit id leaves you in the middle of a tree delete operation. Probably the edit happens during Lines 526 to 530 in 4a8cfe3
(It is somehow also cleared in the beginning of V3Dead, which I do not understand: ) Lines 507 to 510 in 4a8cfe3
My hunch is that during regeneration the type table picks up the wrong |
Yes, it probably got mistracked in scope creation. Interfaces are complicated to handle correctly as they are both data types and modules. |
I did not look into scope creation yet. While I was peeking into I checked the children of the type table again, there are four I believe Does this make sense? |
I noticed Still I do not understand why |
I found the reason: Lines 1562 to 1566 in 4a8cfe3
Lines 1026 to 1034 in 4a8cfe3
I think |
V3Dead should get a correct tree as an input, it shouldn't have to do other resolution work, so it's presumably a problem in V3LinkDot(?) |
Thanks, this helps me a lot. I added a parametered module to the design to compare the differences between a parameterized interface and a module. There is indeed a difference: the type table picks up the right datatypes in case of the parameterized module. The datatypes are added to the data type table via
Is transformed to
Finally the child Somehow this operation is only applied to I am searching for the reason why For completeness I attach the tree image of the second design here. The parameterized module is
|
What matters is the interface level > level of any modules using it. It is a rank of the graph you posted. |
I believe For example the
|
Actually first linking happens during
During
Then
I see that |
Uh oh!
There was an error while loading. Please reload this page.
#3874 contains the test code which leads to the error. The modifications stated in the comments lead to a successful compilation:
Error:
No errors in Vivado.
The text was updated successfully, but these errors were encountered: