ykfre created this revision.
ykfre added a project: clang.
Herald added a subscriber: cfe-commits.
The following code crashes clang:
extern int g;
class A
{
public:
A() {};
~A() {};
};
void b()
{
if(g)
{
goto clean_up;
}
A a;
int i = 0;
clean_up:
return;
}
with
1> #0 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x2e96a72
C:\Program Files\LLVM\bin\clang-cl.exe 0x2e8c649
1> #1 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x2e95c08
C:\Program Files\LLVM\bin\clang-cl.exe 0x2e92890
1> #2 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x2e95c08
C:\Program Files\LLVM\bin\clang-cl.exe 0x2e848f1
1> #3 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x2e78c88
C:\Program Files\LLVM\bin\clang-cl.exe 0x2d55688
1> #4 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x284c373
C:\Program Files\LLVM\bin\clang-cl.exe 0x29b2353
1> #5 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x27e0271
C:\Program Files\LLVM\bin\clang-cl.exe 0x276351e
1> #6 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x27a6c62
C:\Program Files\LLVM\bin\clang-cl.exe 0x276289b
1> #7 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x276222c
C:\Program Files\LLVM\bin\clang-cl.exe 0x27610c3
1> #8 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x275f602
C:\Program Files\LLVM\bin\clang-cl.exe 0x275b44e
1> #9 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x1cb3492
C:\Program Files\LLVM\bin\clang-cl.exe 0x1c771cf
1>#10 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x1d09c87
C:\Program Files\LLVM\bin\clang-cl.exe 0x6e87
1>#11 0x00007ff6e6716a72 C:\Program Files\LLVM\bin\clang-cl.exe 0x4564
C:\Program Files\LLVM\bin\clang-cl.exe 0x33dda20
1>#12 0x00007ff6e6716a72 (C:\Program Files\LLVM\bin\clang-cl.exe+0x2e96a72)
1>#13 0x00007ff6e670c649 (C:\Program Files\LLVM\bin\clang-cl.exe+0x2e8c649)
1>0x00007FF6E6716A72 (0x00007FF6E6709BA1 0x000000000000001E 0x000002A9CC1695B0
0x000002A9CC1665E8)
1>0x00007FF6E670C649 (0x000002A9CC047FA0 0x00007FF6E6794E62 0x000002A9CC1762B0
0x00003A857DAE5EDC)
1>0x00007FF6E6715C08 (0x0000000000000000 0x000002A9CC168780 0x0000000000000001
0x00007FF6E6703CAF)
1>0x00007FF6E6712890 (0x000002A9CC176060 0x00007FF6E6703A01 0x0000000000000050
0x00003A857DAE5B9C)
1>0x00007FF6E6715C08 (0x7A696C616974696E 0x0000026E6F697461 0x000002A9CC028820
0x00007FF6E7D6A2E0)
1>0x00007FF6E67048F1 (0x000002A9CC1665E8 0x000002A9CC0BBCE0 0x0000000000000001
0x00007FF60000005C)
1>0x00007FF6E66F8C88 (0x00003A857DAE50AC 0x000002A9CC166AF0 0x0000000000000000
0x000002A9CC029710)
1>0x00007FF6E65D5688 (0x00003A857DAE2FDC 0x000000C804D8C360 0x000000C804D8C310
0x0000000400000000)
1>0x00007FF6E60CC373 (0x000002A9CC1648E8 0x000002A9CC0BDDF0 0xFFFFFFFFFFFFFFFF
0x000002A9CC1665E8)
1>0x00007FF6E6232353 (0x000002A9CC1665E8 0x00007FF6E6273AEC 0x0000000000000000
0x000002A9CC0B97E0)
1>0x00007FF6E6060271 (0x0000000000000000 0x00007FF6E600C3FA 0x00007FF6E6A61724
0x000002A900000000)
1>0x00007FF6E5FE351E (0x000002A9CC03E658 0x000000C804D8CB28 0x0000000000000041
0x000000C804D8CB20)
1>0x00007FF6E6026C62 (0x000002A9CC0C02B4 0x0000000000000000 0x0000000000000050
0x000002A9CC0C0CC0)
1>0x00007FF6E5FE289B (0x000002A9CC143DD0 0x000002A9CC03A330 0x0000000000000001
0x00007FF6E679978F)
1>0x00007FF6E5FE222C (0x00003A857DAE3BAC 0x000000C804D8D918 0x000002A9CC0377B0
0x0000000000000001)
1>0x00007FF6E5FE10C3 (0x000002A9CBFE5FD0 0x00007FF6E6C4974E 0x000000C804D8F960
0x000000C804D8DA30)
1>0x00007FF6E5FDF602 (0x000000C804D8DB38 0x000000C804D8DB48 0x000000C804D8DB78
0x00007FF6E54F42AA)
1>0x00007FF6E5FDB44E (0x000002A9CC023500 0x00003A857DAE3BFC 0x0000000000000000
0x000000000000000F)
1>0x00007FF6E5533492 (0x000002A9CBFF7990 0x00007FF600000000 0x00000000000000C0
0x0000003404D8DB68)
1>0x00007FF6E54F71CF (0x00007FF6E6C61901 0x000002A900000000 0x000000C804D8EA01
0x0000000000000000)
1>0x00007FF6E5589C87 (0x0000000000000200 0x000002A9CC021FA0 0x000002A9CBFCEE40
0x0000000000000101)
1>0x00007FF6E3886E87 (0x0000000000000000 0x00000000000000A8 0x00000000000006B0
0x0000000000000000)
1>0x00007FF6E3884564 (0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000)
1>0x00007FF6E6C5DA20 (0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000)
1>0x00007FFCF9027BD4 (0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000), BaseThreadInitThunk() + 0x14 bytes(s)
1>0x00007FFCF992CED1 (0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000), RtlUserThreadStart() + 0x21 bytes(s)
1>clang-cl : error : clang frontend command failed due to signal (use -v to see
invocation)
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D72910
Files:
clang/lib/Analysis/CFG.cpp
Index: clang/lib/Analysis/CFG.cpp
===================================================================
--- clang/lib/Analysis/CFG.cpp
+++ clang/lib/Analysis/CFG.cpp
@@ -1837,6 +1837,11 @@
// this sequence up and replay them in reverse order when appending onto the
// CFGBlock(s).
SmallVector<VarDecl*, 10> Decls;
+
+ // Handles the case where goto skips initialization, but there is a
destructor to the object.
+ if (B == LocalScope::const_iterator())
+ return;
+
Decls.reserve(B.distance(E));
for (LocalScope::const_iterator I = B; I != E; ++I)
Decls.push_back(*I);
Index: clang/lib/Analysis/CFG.cpp
===================================================================
--- clang/lib/Analysis/CFG.cpp
+++ clang/lib/Analysis/CFG.cpp
@@ -1837,6 +1837,11 @@
// this sequence up and replay them in reverse order when appending onto the
// CFGBlock(s).
SmallVector<VarDecl*, 10> Decls;
+
+ // Handles the case where goto skips initialization, but there is a destructor to the object.
+ if (B == LocalScope::const_iterator())
+ return;
+
Decls.reserve(B.distance(E));
for (LocalScope::const_iterator I = B; I != E; ++I)
Decls.push_back(*I);
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits