JDK-8224957 : C2 compilation fails with assert: Bad graph detected in build_loop_late
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 13,14
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2019-05-29
  • Updated: 2021-06-04
  • Resolved: 2019-08-13
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 14
14 b10Fixed
Related Reports
Blocks :  
Relates :  
Relates :  
Relates :  
Description
# A fatal error has been detected by the Java Runtime Environment: 
# 
# Internal Error (open/src/hotspot/share/opto/loopnode.cpp:4290), pid=25095, tid=25126 
# assert(false) failed: Bad graph detected in build_loop_late 
# 
# JRE version: Java(TM) SE Runtime Environment (13.0) (fastdebug build 13-ea+0-1128) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 13-ea+0-1128, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64) 
# Problematic frame: 
# V [libjvm.so+0x11d0ece] PhaseIdealLoop::build_loop_late_post_work(Node*, bool)+0x1ae 
# 
# Core dump will be written. Default location: scratch/0/core.25095 
# 

... 

Stack: [0x00007fc96006f000,0x00007fc960170000], sp=0x00007fc96016a340, free space=1004k 
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code) 
V [libjvm.so+0x11d0ece] PhaseIdealLoop::build_loop_late_post_work(Node*, bool)+0x1ae 
V [libjvm.so+0x11d15d5] PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)+0xd5 
V [libjvm.so+0x11d6351] PhaseIdealLoop::build_and_optimize(LoopOptsMode)+0x771 
V [libjvm.so+0x9c3112] PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)+0x2a2 
V [libjvm.so+0x9bfcff] Compile::Optimize()+0x3cf 
V [libjvm.so+0x9c1b6a] Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool, DirectiveSet*)+0x11ba 
V [libjvm.so+0x802c4d] C2Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0x10d 
V [libjvm.so+0x9ce4ed] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x46d 
V [libjvm.so+0x9cf4e8] CompileBroker::compiler_thread_loop()+0x3b8 
V [libjvm.so+0x16c2dba] JavaThread::thread_main_inner()+0x26a 
V [libjvm.so+0x16cb367] JavaThread::run()+0x227 
V [libjvm.so+0x16c8496] Thread::call_run()+0xf6 
V [libjvm.so+0x13e38be] thread_native_entry(Thread*)+0x10e

[stress.process.err] Bad graph detected in build_loop_late
[stress.process.err] n:  777	LoadD	=== _  7  344  [[ 787 ]]  @java/lang/Double:exact+16 *, name=value, idx=11; #double !orig=[345] !jvms: Double::compareTo @ bci:1 Double::compareTo @ bci:5 ConcurrentSkipListMap::cpr @ bci:20 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] early(n):  766	IfFalse	===  765  [[ 295  769 ]] #0 !orig=[293] !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] n->in(1):  7	Parm	===  3  [[ 318  287  785  27  31  35  36  101  40  55  63  139  152  126  777 ]] Memory  Memory: @BotPTR *+bot, idx=Bot; !orig=[119] !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] early(n->in(1)):  3	StartOSR	===  3  0  [[ 3  5  6  7  8  9  10 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:rawptr:BotPTR}
[stress.process.err] n->in(2):  344	AddP	=== _  295  295  232  [[ 777  776 ]]   Oop:java/lang/Double:NotNull:exact+16 * !jvms: Double::compareTo @ bci:1 Double::compareTo @ bci:5 ConcurrentSkipListMap::cpr @ bci:20 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] early(n->in(2)):  766	IfFalse	===  765  [[ 295  769 ]] #0 !orig=[293] !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] n->in(2)->in(1):  295	CheckCastPP	===  766  277  [[ 724  427  344  344  328 ]]  #java/lang/Double:NotNull:exact *  Oop:java/lang/Double:NotNull:exact * !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] early(n->in(2)->in(1)):  766	IfFalse	===  765  [[ 295  769 ]] #0 !orig=[293] !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] n->in(2)->in(2):  295	CheckCastPP	===  766  277  [[ 724  427  344  344  328 ]]  #java/lang/Double:NotNull:exact *  Oop:java/lang/Double:NotNull:exact * !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] early(n->in(2)->in(2)):  766	IfFalse	===  765  [[ 295  769 ]] #0 !orig=[293] !jvms: ConcurrentSkipListMap::cpr @ bci:16 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] n->in(2)->in(3):  232	ConL	===  0  [[ 233  344  346  712 ]]  #long:16
[stress.process.err] early(n->in(2)->in(3)):  0	Root	===  0  114  133  146  159  180  196  213  229  268  285  303  332  413  431  733  [[ 0  1  3  20  21  24  26  709  30  610  34  43  46  53  57  60  79  91  109  128  141  154  175  191  199  232  608  280  289  298  372  389  606  601  599  538  536  535 ]] 
[stress.process.err] 
[stress.process.err] LCA(n):  160	IfTrue	===  150  [[ 783 ]] #1 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] n->out(0):  787	Phi	===  783  777  782  [[ 774 ]]  #double !orig=774,[345] !jvms: Double::compareTo @ bci:1 Double::compareTo @ bci:5 ConcurrentSkipListMap::cpr @ bci:20 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] later(n->out(0)):  783	Loop	===  783  160  778  [[ 783  788  784  785  786  787 ]]  !orig=[161] !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] n->out(0)->out(0):  774	Phi	===  788  787  774  [[ 385  364  391  376  385  774 ]]  #double !orig=[345] !jvms: Double::compareTo @ bci:1 Double::compareTo @ bci:5 ConcurrentSkipListMap::cpr @ bci:20 ConcurrentSkipListMap::findPredecessor @ bci:80
[stress.process.err] later(n->out(0)->out(0)):  788	Loop	===  788  783  724  [[ 788  774  164  163  165  172 ]] inner  !orig=[161] !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] 
[stress.process.err] idom[0]  160	IfTrue	===  150  [[ 783 ]] #1 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[1]  150	If	===  147  149  [[ 151  160 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[2]  147	IfTrue	===  137  [[ 150 ]] #1 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[3]  137	If	===  134  136  [[ 138  147 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[4]  134	IfTrue	===  124  [[ 137 ]] #1 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[5]  124	If	===  92  123  [[ 125  134 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[6]  92	Region	===  92  744  97  [[ 92  93  124 ]]  !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[7]  96	If	===  44  95  [[ 97  98 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[8]  44	Region	===  44  71  50  [[ 44  45  96 ]]  !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[9]  49	If	===  37  48  [[ 50  51 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[10]  37	Proj	===  36  [[ 49 ]] #0 !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[11]  36	CallLeaf	===  5  1  7  8  1 ( 10 ) [[ 37  39 ]] # OSR_migration_end void ( rawptr:BotPTR ) !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18
[stress.process.err] idom[12]  5	Parm	===  3  [[ 35  36  27  31 ]] Control !jvms: ConcurrentSkipListMap::findPredecessor @ bci:18

Comments
Checked both vmTestbase/vm/gc/containers/ConcurrentHashMap_Arrays/TestDescription.java and compiler/eliminateAutobox/TestSplitThroughPhi.java passes in jdk14 atr and CI.
30-01-2020

URL: https://hg.openjdk.java.net/jdk/jdk/rev/8e51da27b53a User: thartmann Date: 2019-08-13 07:56:31 +0000
13-08-2019

I found more problems when testing this patch (see JDK-8228772). I'll disable AggressiveUnboxing in JDK 13 (see JDK-8228710) and will defer this to JDK 14.
30-07-2019

*Background* The fix for JDK-8217919 [1] re-enabled AggressiveUnboxing by default. LoadNode::split_through_phi therefore tries to split loads from box value fields through their input memory phis (because these boxes are immutable). The code is supposed to bail out if the region dominates some control edge of the address by calling MemNode::all_controls_dominate [2] which relies on Node::dominates. *Problem* Node::dominates implicitly assumes that regions with more than two input paths are always dominated by their first input [3]. This is not correct. *Details* In the failing case (see regression test), we OSR compile a loop with two backbranches. After parsing, Region 84 has not yet been converted to a loop, input nodes 190 and 186 belong to the backbranches and input 83 is the OSR entry: http://cr.openjdk.java.net/~thartmann/8224957/1_after_parsing.png We then attempt to split LoadI 139 through Phi 86 with Region 84 and therefore check if control of the AddP 138 (which is If 97) dominates that region. Node::dominates walks up the dominator chain from Region 84 to check if If 97 is reachable. Since the region has more than two input paths, only the backbranch at in(1) is taken and after reversing through the loop body we finally reach If 97. Since we did not detect any loops, we incorrectly conclude that If 97 must dominate Region 84 [4]. After splitting LoadI 139 through Phi 86, the graph looks like this: http://cr.openjdk.java.net/~thartmann/8224957/2_after_split_through_phi.png We then assert after beautify loops due to a bad graph: http://cr.openjdk.java.net/~thartmann/8224957/3_after_beautify_loops.png Phi 200 has Loop 209 as control and LoadI 203 as dependency which can't be scheduled that early because its address depends on If 97 (see log at [5] for details). The problematic code was added long ago with the fix for JDK-6695810 [6] but never triggered because AggressiveUnboxing was disabled. Also, it was very hard to reproduce this problem (only happened with JMH executing a Java Script benchmark with Nashorn) and even harder to extract a simple test. *Fix* http://cr.openjdk.java.net/~thartmann/8224957/webrev.00/ My proposed fix simply disables walking up the dominator chain for regions with more than 2 input paths. I'm currently running correctness and performance testing. An alternative would be to handle regions with more than 2 inputs paths by visiting all inputs. [1] https://bugs.openjdk.java.net/browse/JDK-8217919 [2] http://hg.openjdk.java.net/jdk/jdk/file/5da01706bf11/src/hotspot/share/opto/memnode.cpp#l1453 [3] http://hg.openjdk.java.net/jdk/jdk/file/5da01706bf11/src/hotspot/share/opto/node.cpp#l1231 [4] http://hg.openjdk.java.net/jdk/jdk/file/5da01706bf11/src/hotspot/share/opto/node.cpp#l1206 [5] http://cr.openjdk.java.net/~thartmann/8224957/fail.log [6] https://bugs.openjdk.java.net/browse/JDK-6695810
26-07-2019

I was finally able to create a simple regression test for this: https://bugs.openjdk.java.net/secure/attachment/83772/Test.java Execute with: -XX:-TieredCompilation -XX:+UseG1GC -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,Test::test -XX:+PrintCompilation -XX:-ProfileInterpreter
25-07-2019

Yes, I will investigate more and if I don't make any progress, we should disable AggressiveUnboxing in JDK 13.
22-07-2019

If it will take time to diagnose and fix the issue I would agree to disable AggressiveUnboxing in JDK 13 and defer fix for this bug to JDK 14.
19-07-2019

I can reproduce the issue with latest JDK 14 and back until jdk-14+6-144 where the Nashorn fix for JDK-8223451 triggers it. If I apply JDK-8223451 to earlier versions, I can still reproduce it. I was finally able to narrow it down to jdk-13+7 and since I can not reproduce the issue anymore with -XX:-AggressiveUnboxing, it has most likely been introduced/triggered by JDK-8217919 or JDK-8217918.
19-07-2019

I can reproduce the ConcurrentHashMap_Arrays/TestDescription.java failure with build build 13-ea+0-1147. It doesn't reproduce with latest JDK13 or mainline/JDK14. All test failure in mach5 have ceased since May 28th. Closing as already fixed.
20-06-2019

This bug doesn't seem to reproduce with SparkExamples since May 28th. Could be a reason why I have failed to reproduce it myself.
17-06-2019

Trying to repro with concurrent hashmap tests
11-06-2019

Invokes and varHandles in the method, so replay is unusable. (replay_pid23130.log)
11-06-2019

ILW = Crash during compilation (potential regression in JDK 13), intermittent with stress test, no workaround (but disable compilation or loop opts) = HMM = P2
29-05-2019

A similar failure happens with vmTestbase/vm/gc/containers/ConcurrentHashMap_Arrays/TestDescription.java. I've reproduced it once with: jtreg -jdk:/oracle/jdk_jdk/build/linux-x64/jdk/ -va -javaoptions:"-Xcomp -XX:+TieredCompilation -XX:+UseSerialGC -XX:+CreateCoredumpOnCrash -XX:+IgnoreUnrecognizedVMOptions" ./test/hotspot/jtreg/vmTestbase/vm/gc/containers/ConcurrentHashMap_Arrays/TestDescription.java Bad graph detected in build_loop_late n: 2948 LoadI === _ 7 379 [[ 2975 ]] @java/lang/Integer:exact+12 *, name=value, idx=9; #int !orig=[380] !jvms: Integer::equals @ bci:8 ConcurrentHashMap::putVal @ bci:242 early(n): 2815 IfFalse === 2814 [[ 327 2818 ]] #0 !orig=[325] !jvms: ConcurrentHashMap::putVal @ bci:242 n->in(1): 7 Parm === 3 [[ 2948 2215 19 26 30 31 1938 80 95 113 1723 122 146 1416 154 172 787 178 351 2967 319 224 237 211 ]] Memory Memory: @BotPTR *+bot, idx=Bot; !orig=[197] !jvms: ConcurrentHashMap::putVal @ bci:212 early(n->in(1)): 3 StartOSR === 3 0 [[ 3 5 6 7 8 9 10 ]] #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:rawptr:BotPTR} n->in(2): 379 AddP === _ 327 327 273 [[ 2948 2947 ]] Oop:java/lang/Integer:NotNull:exact+12 * !jvms: Integer::equals @ bci:8 ConcurrentHashMap::putVal @ bci:242 early(n->in(2)): 2815 IfFalse === 2814 [[ 327 2818 ]] #0 !orig=[325] !jvms: ConcurrentHashMap::putVal @ bci:242 n->in(2)->in(1): 327 CheckCastPP === 2815 317 [[ 379 361 379 361 ]] #java/lang/Integer:NotNull:exact * Oop:java/lang/Integer:NotNull:exact * !jvms: ConcurrentHashMap::putVal @ bci:242 early(n->in(2)->in(1)): 2815 IfFalse === 2814 [[ 327 2818 ]] #0 !orig=[325] !jvms: ConcurrentHashMap::putVal @ bci:242 n->in(2)->in(2): 327 CheckCastPP === 2815 317 [[ 379 361 379 361 ]] #java/lang/Integer:NotNull:exact * Oop:java/lang/Integer:NotNull:exact * !jvms: ConcurrentHashMap::putVal @ bci:242 early(n->in(2)->in(2)): 2815 IfFalse === 2814 [[ 327 2818 ]] #0 !orig=[325] !jvms: ConcurrentHashMap::putVal @ bci:242 n->in(2)->in(3): 273 ConL === 0 [[ 274 379 392 1937 537 786 860 1014 1076 1415 2171 1540 1722 ]] #long:12 early(n->in(2)->in(3)): 0 Root === 0 192 218 231 244 271 316 335 365 602 614 626 664 676 688 718 730 742 771 934 946 958 2784 2785 1372 1384 1396 1653 1765 1884 1896 1908 2199 2248 2303 2315 2327 2628 2729 [[ 0 1 3 20 21 23 2249 2211 29 33 38 1957 42 1967 46 1760 50 1635 54 1428 58 1188 62 1176 66 1175 70 1124 74 83 86 93 103 115 118 120 136 1114 152 187 206 213 226 239 266 273 284 321 330 977 442 444 976 869 831 519 745 829 2845 2897 ]] LCA(n): 245 IfTrue === 235 [[ 2965 ]] #1 !jvms: ConcurrentHashMap::putVal @ bci:212 n->out(0): 2975 Phi === 2965 2948 2964 [[ 2945 ]] #int !orig=2945,[380] !jvms: Integer::equals @ bci:8 ConcurrentHashMap::putVal @ bci:242 later(n->out(0)): 2965 Loop === 2965 245 2954 [[ 2965 2976 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 ]] !orig=[246] !jvms: ConcurrentHashMap::putVal @ bci:212 n->out(0)->out(0): 2945 Phi === 2976 2975 2945 [[ 395 2945 ]] #int !orig=[380] !jvms: Integer::equals @ bci:8 ConcurrentHashMap::putVal @ bci:242 later(n->out(0)->out(0)): 2976 Loop === 2976 2965 2749 [[ 2976 2945 255 254 256 252 251 250 249 248 247 263 ]] inner !orig=[246] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[0] 245 IfTrue === 235 [[ 2965 ]] #1 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[1] 235 If === 232 234 [[ 236 245 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[2] 232 IfTrue === 222 [[ 235 ]] #1 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[3] 222 If === 219 221 [[ 223 232 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[4] 219 IfTrue === 209 [[ 222 ]] #1 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[5] 209 If === 163 208 [[ 210 219 ]] P=0.999999, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[6] 163 Region === 163 2805 168 [[ 163 164 209 ]] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[7] 167 If === 137 166 [[ 168 169 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[8] 137 Region === 137 2801 142 [[ 137 138 167 ]] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[9] 141 If === 2797 140 [[ 142 143 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[10] 2797 IfFalse === 2796 [[ 141 ]] #0 !orig=[134] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[11] 2796 If === 104 2795 [[ 2797 2798 ]] P=0.000001, C=-1.000000 !orig=[133] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[12] 104 Region === 104 2793 109 [[ 104 105 2796 ]] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[13] 108 If === 84 107 [[ 109 110 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[14] 84 Region === 84 2789 90 [[ 84 85 108 ]] !jvms: ConcurrentHashMap::putVal @ bci:212 idom[15] 89 If === 77 88 [[ 90 91 ]] P=0.999000, C=-1.000000 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[16] 77 Proj === 76 [[ 89 ]] #0 !jvms: ConcurrentHashMap::putVal @ bci:212 idom[17] 76 CallLeaf === 5 1 19 8 1 ( 10 ) [[ 77 79 ]] # OSR_migration_end void ( rawptr:BotPTR ) !jvms: ConcurrentHashMap::putVal @ bci:212 idom[18] 5 Parm === 3 [[ 75 76 26 30 31 36 39 43 47 51 55 59 63 67 71 ]] Control !jvms: ConcurrentHashMap::putVal @ bci:212 # To suppress the following error report, specify this argument # after -XX: or in .hotspotrc: SuppressErrorAt=/loopnode.cpp:4290 # # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (open/src/hotspot/share/opto/loopnode.cpp:4290), pid=30766, tid=30779 # assert(false) failed: Bad graph detected in build_loop_late # # JRE version: Java(TM) SE Runtime Environment (13.0) (fastdebug build 13-internal+0-2019-05-29-0936529.tobias.null) # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 13-internal+0-2019-05-29-0936529.tobias.null, compiled mode, tiered, compressed oops, serial gc, linux-amd64) # Problematic frame: # V [libjvm.so+0x11cd8ce] PhaseIdealLoop::build_loop_late_post_work(Node*, bool)+0x1ae # # Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P" (or dumping to /oracle/jdk_jdk/open/JTwork/scratch/core.30766) # # An error report file with more information is saved as: # /oracle/jdk_jdk/open/JTwork/scratch/hs_err_pid30766.log # # Compiler replay data is saved as: # /oracle/jdk_jdk/open/JTwork/scratch/replay_pid30766.log # # If you would like to submit a bug report, please visit: # http://bugreport.java.com/bugreport/crash.jsp #
29-05-2019