-
-
Notifications
You must be signed in to change notification settings - Fork 747
Run CircleCi in BUILD=debug #5929
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
Conversation
To investigate the repeated, spurious failures on CircleCi. This should allow us to get a better stack trace. It also tweaks the gdb command.
|
Thanks for your pull request, @wilzbach! Bugzilla referencesYour PR doesn't reference any Bugzilla issue. If your PR contains non-trivial changes, please reference a Bugzilla issue or create a manual changelog. |
|
The make files of druntime and phobos expect that dmd is always built in release mode, so it would be easier to not add |
Okay that was unexpected :/
|
|
OK another PR at DMD (dlang/dmd#7444) and the we should hopefully be able to use |
|
So building Phobos with (a good thing that CircleCi uses an older Linux Distro and thus line numbers on stack traces work :P) |
|
Is that a reentrant GC invocation? Should that not have raised a MemoryOperationError? |
No, the GC is scanning ranges by iterating the Treap container. I suspect that a range has not been removed from the GC, but the memory has been freed. This only crashes if the page is actually unmapped from the virtual address space (which doesn't happen too often and might be causing the failures to be spurious). |
|
Hmm, but if we upgrade to CircleCi 2.0, we only get See: #5930 (comment)
Hmm, but that would explain why it SEGFAULTs in different places randomly then? Any ideas/pointers on how we could find the faulty code? DScanner is rather large as it has many checks and uses |
|
As discussed with @wilzbach, this makes debugging via ssh on CircleCI much easier, so we'll go forward with this PR, even though it doesn't fix the underlying problem. |
|
I will-forced this PR now as it allows to debug the other failing PRs better. |
This is usually thrown when a C malloc/calloc/realloc failed. Without more stack trace it's unclear what happens there.
Two of those stack traces look identical to the one above, but the others do not. Any crash could happen if a wrong GC range has been removed instead of just omitting a removal.
Can you reproduce it locally? If not, can you get a core dump of the crash from the CI? If my suspicion is correct, you could log GC activity by enabling debug=PRINTF, debug=COLLECT_PRINTF, debug=PRINTF_TO_FILE in gc.impl.conservative.gc and try to figure out what happened to the crash address. |
|
I ssh-ed on one of the CircleCI build VMs, and whether I add the following code, and whether I comment the diff --git a/std/file.d b/std/file.d
index d9a8d88..f845867 100644
--- a/std/file.d
+++ b/std/file.d
@@ -3831,6 +3831,11 @@ private struct DirIteratorImpl
if (core.stdc.string.strcmp(&fdata.d_name[0], ".") &&
core.stdc.string.strcmp(&fdata.d_name[0], ".."))
{
+ import std.stdio;
+ auto var = _stack[$-1].dirpath;
+ writef("%s, %s: ", var.ptr, var.length);
+ //writeln(var);
+
_cur = DirEntry(_stack[$-1].dirpath, fdata);
return true;
}I get either: ../dscanner-bb32e9f1e3e5206deb11b3dbc43ad44e23fabf96/dsc --config .dscanner.ini --styleCheck etc std -I.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x000000000095c0fc in std.range() (this=...) at ../dmd/generated/linux/debug/64/../../../../../phobos/std/range/package.d:999
999 return fixRef(source[i].front);
#0 0x000000000095c0fc in std.range() (this=...) at ../dmd/generated/linux/debug/64/../../../../../phobos/std/range/package.d:999
#1 0x00000000008b07d1 in std.path() (segments=...) at ../dmd/generated/linux/debug/64/../../../../../phobos/std/path.d:1380
#2 0x00000000008b05e4 in std.path() (paths=...) at ../dmd/generated/linux/debug/64/../../../../../phobos/std/path.d:1396
#3 0x0000000000a595cb in std.file.DirEntry.__ctor() (this=..., fd=0x7ffff24a5031, path=...) at std/file.d:3103
#4 0x0000000000a5a244 in std.file.DirIteratorImpl.next() (this=...) at std/file.d:3834
#5 0x0000000000a5a582 in std.file.DirIteratorImpl.popFront() (this=...) at std/file.d:3932
#6 0x0000000000a5a841 in std.file.DirIterator.popFront() (this=...) at std/file.d:3954
#7 0x00000000008ab1b5 in dsymbol.modulecache.ModuleCache.addImportPaths() (this=0x7ffff7eeb530, root=...) at dsymbol/src/dsymbol/modulecache.d:133
#8 0x00000000008ab1a9 in dsymbol.modulecache.ModuleCache.addImportPaths() (this=0x7ffff7eeb530, root=...) at dsymbol/src/dsymbol/modulecache.d:132
#9 0x00000000008ab1a9 in dsymbol.modulecache.ModuleCache.addImportPaths() (this=0x7ffff7eeb530, root=...) at dsymbol/src/dsymbol/modulecache.d:132
#10 0x00000000008ab1a9 in dsymbol.modulecache.ModuleCache.addImportPaths() (this=0x7ffff7eeb530, root=...) at dsymbol/src/dsymbol/modulecache.d:132
#11 0x00000000008aafdf in dsymbol.modulecache.ModuleCache.addImportPaths() (this=..., paths=...) at dsymbol/src/dsymbol/modulecache.d:136
#12 0x0000000000a3a199 in D main (args=...) at src/main.d:151
#13 0x0000000000a4fecc in rt.dmain2._d_run_main() (this=0x7fffffffdda0) at src/rt/dmain2.d:500
#14 0x0000000000a4fd14 in rt.dmain2._d_run_main() (this=0x7fffffffdda0, dg=...) at src/rt/dmain2.d:461
#15 0x0000000000a4fe21 in rt.dmain2._d_run_main() (this=0x7fffffffdda0) at src/rt/dmain2.d:500
#16 0x0000000000a4fd14 in rt.dmain2._d_run_main() (this=0x7fffffffdda0, dg=...) at src/rt/dmain2.d:461
#17 0x0000000000a4fc78 in _d_run_main (argc=7, argv=0x7fffffffdea8, mainFunc=0xa39bbc <D main>) at src/rt/dmain2.d:520
#18 0x0000000000a475fa in main ()gdb -q -ex run -ex bt -batch --args ../dscanner-bb32e9f1e3e5206deb11b3dbc43ad44e23fabf96/dsc --config .dscanner.ini --styleCheck etc std -I.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
<snip my write[f|ln](..) output>
Program received signal SIGSEGV, Segmentation fault.
0x0000000000a8dbe0 in gc.impl.conservative() (this=..., ptop=0x5db2540, pbot=0x5db2500) at src/gc/impl/conservative/gc.d:1990
1990 auto p = *p1;
#0 0x0000000000a8dbe0 in gc.impl.conservative() (this=..., ptop=0x5db2540, pbot=0x5db2500) at src/gc/impl/conservative/gc.d:1990
#1 0x0000000000a8e4e5 in gc.impl.conservative() (this=0x7fffffff9a90, __applyArg0=...) at src/gc/impl/conservative/gc.d:2188
#2 0x0000000000a980b1 in rt.util.container.treap() (this=0x7fffffff9a50, e=...) at src/rt/util/container/treap.d:47
#3 0x0000000000a98489 in rt.util.container.treap() (dg=..., node=0x14590b0) at src/rt/util/container/treap.d:221
#4 0x0000000000a98466 in rt.util.container.treap() (dg=..., node=0x1fbdac0) at src/rt/util/container/treap.d:218
#5 0x0000000000a98466 in rt.util.container.treap() (dg=..., node=0x2f02910) at src/rt/util/container/treap.d:218
#6 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x151c180) at src/rt/util/container/treap.d:224
#7 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x11fc940) at src/rt/util/container/treap.d:224
#8 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x58e8d90) at src/rt/util/container/treap.d:224
#9 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x2f115c0) at src/rt/util/container/treap.d:224
#10 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x4f96de0) at src/rt/util/container/treap.d:224
#11 0x0000000000a984b5 in rt.util.container.treap() (dg=..., node=0x4f8f390) at src/rt/util/container/treap.d:224
#12 0x0000000000a980e7 in rt.util.container.treap() (this=..., dg=...) at src/rt/util/container/treap.d:52
#13 0x0000000000a98083 in rt.util.container.treap() (this=..., dg=...) at src/rt/util/container/treap.d:47
#14 0x0000000000a8e464 in gc.impl.conservative() (this=..., nostack=false) at src/gc/impl/conservative/gc.d:2185
#15 0x0000000000a8ef2a in gc.impl.conservative() (this=..., nostack=false) at src/gc/impl/conservative/gc.d:2417
#16 0x0000000000a8d06d in gc.impl.conservative() (this=..., bits=8, alloc_size=@0x7fffffff9d28: 128, bin=3 '\003') at src/gc/impl/conservative/gc.d:1711
#17 0x0000000000a8cefe in gc.impl.conservative() (this=..., bits=8, alloc_size=@0x7fffffff9d28: 128, size=81) at src/gc/impl/conservative/gc.d:1676
#18 0x0000000000a8ae71 in gc.impl.conservative() (this=0xe9e0d0, ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, alloc_size=@0x7fffffff9d28: 128, bits=8, size=81) at src/gc/impl/conservative/gc.d:517
#19 0x0000000000a90f72 in gc.impl.conservative() (this=0xe9e0d0, _param_3=@0x7fffffff9d48: 0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, _param_2=@0x7fffffff9d28: 128, _param_1=@0x7fffffff9d50: 8, _param_0=@0x7fffffff9d58: 81) at src/gc/impl/conservative/gc.d:390
#20 0x0000000000a8af13 in gc.impl.conservative() (this=0xe9e0d0, __HID11=0x7fffffff9d78, ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, bits=8, size=81) at src/gc/impl/conservative/gc.d:543
#21 0x0000000000a4ed8f in gc_qalloc (__HID9=0x7fffffff9dc8, sz=81, ba=8, ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>) at src/gc/proxy.d:122
#22 0x0000000000a4e563 in core.memory.GC.qalloc() (__HID2=0x7fffffff9e50, ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, ba=8, sz=81) at src/core/memory.d:406
#23 0x0000000000a93a43 in rt.lifetime.__arrayAlloc() (__HID23=0x7fffffff9f40, tinext=0xe1e960 <TypeInfo_AxC6dparse3ast9Attribute.__init()>, ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, info=..., arrsize=80) at src/rt/lifetime.d:445
#24 0x0000000000a5299a in _d_arraysetlengthT (ti=0xe45b30 <TypeInfo_AAxC6dparse3ast9Attribute.__init()>, newlength=5, p=0x7ffff7fbed38) at src/rt/lifetime.d:1585
#25 0x00000000009cd888 in analysis.redundant_attributes.RedundantAttributesCheck.pushScope() (this=0x7ffff7fbed00) at src/analysis/redundant_attributes.d:167
#26 0x00000000009cd369 in analysis.redundant_attributes.RedundantAttributesCheck.__mixin22.visit() (this=0x7ffff7fbed00, n=0x250b1b0) at src/analysis/redundant_attributes.d:159
#27 0x00000000008d5afa in dparse.ast.Statement.accept() (this=0x250abf8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2650:2651
#28 0x00000000008c86f5 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, statement=0x250abf8) at libdparse/src/dparse/ast.d:289
#29 0x00000000008ceaee in dparse.ast.DeclarationOrStatement.accept() (this=0x250abd0, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1383:1384
#30 0x00000000008c7c55 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsOrStatement=0x250abd0) at libdparse/src/dparse/ast.d:204
#31 0x00000000008ce98d in dparse.ast.DeclarationsAndStatements.accept() (this=0x24fabf0, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1370:1370
#32 0x00000000008c7c75 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsAndStatements=0x24fabf0) at libdparse/src/dparse/ast.d:205
#33 0x00000000008cbae1 in dparse.ast.BlockStatement.accept() (this=0x24fabc0, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-973:973
#34 0x00000000009cd30e in analysis.redundant_attributes.RedundantAttributesCheck.__mixin20.visit() (this=0x7ffff7fbed00, n=0x24fabc0) at src/analysis/redundant_attributes.d:160
#35 0x00000000008d35ee in dparse.ast.StatementNoCaseNoDefault.accept() (this=0x24faac8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2291:2292
#36 0x00000000008c8715 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, statementNoCaseNoDefault=0x24faac8) at libdparse/src/dparse/ast.d:290
#37 0x00000000008d5ad9 in dparse.ast.Statement.accept() (this=0x24faa90, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2650:2650
#38 0x00000000008c86f5 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, statement=0x24faa90) at libdparse/src/dparse/ast.d:289
#39 0x00000000008d6962 in dparse.ast.SwitchStatement.accept() (this=0x24fa560, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2830:2831
#40 0x00000000008c8895 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, switchStatement=0x24fa560) at libdparse/src/dparse/ast.d:302
#41 0x00000000008cfb29 in dparse.ast.FinalSwitchStatement.accept() (this=0x24fa540, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1601:1601
#42 0x00000000008c7e55 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, finalSwitchStatement=0x24fa540) at libdparse/src/dparse/ast.d:220
#43 0x00000000008d36d5 in dparse.ast.StatementNoCaseNoDefault.accept() (this=0x24fa448, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2291:2299
#44 0x00000000008c8715 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, statementNoCaseNoDefault=0x24fa448) at libdparse/src/dparse/ast.d:290
#45 0x00000000008d5ad9 in dparse.ast.Statement.accept() (this=0x24fa410, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2650:2650
#46 0x00000000008c86f5 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, statement=0x24fa410) at libdparse/src/dparse/ast.d:289
#47 0x00000000008ceaee in dparse.ast.DeclarationOrStatement.accept() (this=0x24fa3e8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1383:1384
#48 0x00000000008c7c55 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsOrStatement=0x24fa3e8) at libdparse/src/dparse/ast.d:204
#49 0x00000000008ce98d in dparse.ast.DeclarationsAndStatements.accept() (this=0x48b4258, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1370:1370
#50 0x00000000008c7c75 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsAndStatements=0x48b4258) at libdparse/src/dparse/ast.d:205
#51 0x00000000008cbae1 in dparse.ast.BlockStatement.accept() (this=0x48b4228, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-973:973
#52 0x00000000009cd30e in analysis.redundant_attributes.RedundantAttributesCheck.__mixin20.visit() (this=0x7ffff7fbed00, n=0x48b4228) at src/analysis/redundant_attributes.d:160
#53 0x00000000008d02ec in dparse.ast.FunctionBody.accept() (this=0x48b41f0, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1728:1731
#54 0x00000000008c7f75 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, functionBody=0x48b41f0) at libdparse/src/dparse/ast.d:229
#55 0x00000000008d06bd in dparse.ast.FunctionDeclaration.accept() (this=0x48b3cf8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1760:1767
#56 0x00000000008c7fb5 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, functionDeclaration=0x48b3cf8) at libdparse/src/dparse/ast.d:231
#57 0x00000000008cd754 in dparse.ast.Declaration.accept() (this=0x48b3c20, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d:1292
#58 0x00000000009cd2a9 in analysis.redundant_attributes.RedundantAttributesCheck.visit() (this=0x7ffff7fbed00, decl=0x48b3c20) at src/analysis/redundant_attributes.d:64
#59 0x00000000008ceacd in dparse.ast.DeclarationOrStatement.accept() (this=0x48b3bf8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1383:1383
#60 0x00000000008c7c55 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsOrStatement=0x48b3bf8) at libdparse/src/dparse/ast.d:204
#61 0x00000000008ce98d in dparse.ast.DeclarationsAndStatements.accept() (this=0x1047930, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1370:1370
#62 0x00000000008c7c75 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, declarationsAndStatements=0x1047930) at libdparse/src/dparse/ast.d:205
#63 0x00000000008cbae1 in dparse.ast.BlockStatement.accept() (this=0x1047900, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-973:973
#64 0x00000000009cd30e in analysis.redundant_attributes.RedundantAttributesCheck.__mixin20.visit() (this=0x7ffff7fbed00, n=0x1047900) at src/analysis/redundant_attributes.d:160
#65 0x00000000008d02ec in dparse.ast.FunctionBody.accept() (this=0x10478c8, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1728:1731
#66 0x00000000008c7f75 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, functionBody=0x10478c8) at libdparse/src/dparse/ast.d:229
#67 0x00000000008d06bd in dparse.ast.FunctionDeclaration.accept() (this=0x1046a20, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-1760:1767
#68 0x00000000008c7fb5 in dparse.ast.ASTVisitor.visit() (this=0x7ffff7fbed00, functionDeclaration=0x1046a20) at libdparse/src/dparse/ast.d:231
#69 0x00000000008cd754 in dparse.ast.Declaration.accept() (this=0x1046880, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d:1292
#70 0x00000000009cd2a9 in analysis.redundant_attributes.RedundantAttributesCheck.visit() (this=0x7ffff7fbed00, decl=0x1046880) at src/analysis/redundant_attributes.d:64
#71 0x00000000008d2feb in dparse.ast.Module.accept() (this=0x119cea0, visitor=0x7ffff7fbed00) at libdparse/src/dparse/ast.d-mixin-2214:2216
#72 0x00000000009cd2da in analysis.redundant_attributes.RedundantAttributesCheck.__mixin19.visit() (this=0x7ffff7fbed00, n=0x119cea0) at src/analysis/redundant_attributes.d:160
#73 0x00000000009d2233 in analysis.run.analyze() (staticAnalyze=true, tokens=..., moduleCache=..., analysisConfig=..., m=0x119cea0, fileName=...) at src/analysis/run.d:498
#74 0x00000000009cf412 in analysis.run.analyze() (staticAnalyze=true, moduleCache=..., cache=..., config=..., fileNames=...) at src/analysis/run.d:182
#75 0x0000000000a3b397 in D main (args=...) at src/main.d:237
#76 0x0000000000a5073c in rt.dmain2._d_run_main() (this=0x7fffffffdda0) at src/rt/dmain2.d:500
#77 0x0000000000a50584 in rt.dmain2._d_run_main() (this=0x7fffffffdda0, dg=...) at src/rt/dmain2.d:461
#78 0x0000000000a50691 in rt.dmain2._d_run_main() (this=0x7fffffffdda0) at src/rt/dmain2.d:500
#79 0x0000000000a50584 in rt.dmain2._d_run_main() (this=0x7fffffffdda0, dg=...) at src/rt/dmain2.d:461
#80 0x0000000000a504e8 in _d_run_main (argc=7, argv=0x7fffffffdea8, mainFunc=0xa3a42c <D main>) at src/rt/dmain2.d:520
#81 0x0000000000a47e6a in main ()Or: gdb -q -ex run -ex bt -batch --args ../dscanner-bb32e9f1e3e5206deb11b3dbc43ad44e23fabf96/dsc --config .dscanner.ini --styleCheck etc std -I.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
<snip my write[f|ln](..) output>
[Inferior 1 (process 14863) exited with code 01]
No stack. |
|
I opened a Bugzilla issue for this, s.t. it's not forgotten: https://issues.dlang.org/show_bug.cgi?id=18409 |
|
@rainers @wilzbach I got the GC log Steps to reproduce
|
|
Where in the code it's failing Assembly dsc`D8analysis24incorrect_infinite_range27IncorrectInfiniteRangeCheck5visitMFxC6dparse3ast14BlockStatementZv:
0x1001da548 <+0>: pushq %rbp
0x1001da549 <+1>: movq %rsp, %rbp
0x1001da54c <+4>: subq $0x20, %rsp
0x1001da550 <+8>: movq %rbx, -0x18(%rbp)
0x1001da554 <+12>: movq %rdi, -0x10(%rbp)
0x1001da558 <+16>: movq %rsi, -0x8(%rbp)
0x1001da55c <+20>: movq -0x8(%rbp), %rax
-> 0x1001da560 <+24>: cmpq $0x0, 0x28(%rax)
0x1001da565 <+29>: jne 0x1001da56d ; <+37>
0x1001da567 <+31>: movq -0x18(%rbp), %rbx
0x1001da56b <+35>: leave
0x1001da56c <+36>: retq
0x1001da56d <+37>: movq -0x8(%rbp), %rcx
0x1001da571 <+41>: movq 0x28(%rcx), %rdx
0x1001da575 <+45>: movq 0x20(%rdx), %rsi
0x1001da579 <+49>: orq 0x18(%rdx), %rsi
0x1001da57d <+53>: jne 0x1001da585 ; <+61>
0x1001da57f <+55>: movq -0x18(%rbp), %rbx
0x1001da583 <+59>: leave
0x1001da584 <+60>: retq
0x1001da585 <+61>: movq -0x8(%rbp), %rbx
0x1001da589 <+65>: movq 0x28(%rbx), %rax
0x1001da58d <+69>: cmpq $0x1, 0x18(%rax)
0x1001da592 <+74>: je 0x1001da59a ; <+82>
0x1001da594 <+76>: movq -0x18(%rbp), %rbx
0x1001da598 <+80>: leave
0x1001da599 <+81>: retq
0x1001da59a <+82>: movq -0x8(%rbp), %rcx
0x1001da59e <+86>: movq 0x28(%rcx), %rsi
0x1001da5a2 <+90>: movq -0x10(%rbp), %rdi
0x1001da5a6 <+94>: movq (%rdi), %rdx
0x1001da5a9 <+97>: callq *0x220(%rdx)
0x1001da5b0 <+104>: movq -0x18(%rbp), %rbx
0x1001da5b4 <+108>: leave
0x1001da5b5 <+109>: retq
0x1001da5b6 <+110>: nopBacktrace |
|
Weird, now I can reproduce it locally too. diff --git a/src/analysis/incorrect_infinite_range.d b/src/analysis/incorrect_infinite_range.d
index cb3b4c8..bac0a7a 100644
--- a/src/analysis/incorrect_infinite_range.d
+++ b/src/analysis/incorrect_infinite_range.d
@@ -50,6 +50,8 @@ class IncorrectInfiniteRangeCheck : BaseAnalyzer
override void visit(const BlockStatement bs)
{
+ if (bs is null)
+ return;
if (bs.declarationsAndStatements is null)
return;
if (bs.declarationsAndStatements.declarationsAndStatements is null) |
|
Oh so the current failure is a DScanner bug (-> #6148), but it's not the GC Segfault we have observed initially :/ |
To investigate the repeated, spurious failures on CircleCi.
This should allow us to get a better stack trace.
It also tweaks the gdb command.