Fix exponential pseudocode size on incorrect prefix increments and decrements

#KT-44153 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-03-15 18:34:28 +03:00
parent 6c5557dae3
commit cef859fced
10 changed files with 161 additions and 20 deletions
+73
View File
@@ -0,0 +1,73 @@
== crash_1 ==
fun crash_1() {
"".split(----------------------------------)
}
---------------------
L0:
1 <START>
2 mark({ "".split(----------------------------------) })
mark("".split(----------------------------------))
magic[UNRESOLVED_CALL](----|!<v0>) -> <v1>
magic[UNRESOLVED_CALL](------|<v1>) -> <v2>
magic[UNRESOLVED_CALL](--------|<v2>) -> <v3>
magic[UNRESOLVED_CALL](----------|<v3>) -> <v4>
magic[UNRESOLVED_CALL](------------|<v4>) -> <v5>
magic[UNRESOLVED_CALL](--------------|<v5>) -> <v6>
magic[UNRESOLVED_CALL](----------------|<v6>) -> <v7>
magic[UNRESOLVED_CALL](------------------|<v7>) -> <v8>
magic[UNRESOLVED_CALL](--------------------|<v8>) -> <v9>
magic[UNRESOLVED_CALL](----------------------|<v9>) -> <v10>
magic[UNRESOLVED_CALL](------------------------|<v10>) -> <v11>
magic[UNRESOLVED_CALL](--------------------------|<v11>) -> <v12>
magic[UNRESOLVED_CALL](----------------------------|<v12>) -> <v13>
magic[UNRESOLVED_CALL](------------------------------|<v13>) -> <v14>
magic[UNRESOLVED_CALL](--------------------------------|<v14>) -> <v15>
magic[UNRESOLVED_CALL](----------------------------------|<v15>) -> <v16>
mark("")
r("") -> <v17>
mark(split(----------------------------------))
magic[UNRESOLVED_CALL](split(----------------------------------)|<v16>, !<v18>, <v17>) -> <v19>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
== crash_2 ==
fun crash_2() {
"".split(-----------------------------------)
}
---------------------
L0:
1 <START>
2 mark({ "".split(-----------------------------------) })
mark("".split(-----------------------------------))
magic[UNRESOLVED_CALL](---|!<v0>) -> <v1>
magic[UNRESOLVED_CALL](-----|<v1>) -> <v2>
magic[UNRESOLVED_CALL](-------|<v2>) -> <v3>
magic[UNRESOLVED_CALL](---------|<v3>) -> <v4>
magic[UNRESOLVED_CALL](-----------|<v4>) -> <v5>
magic[UNRESOLVED_CALL](-------------|<v5>) -> <v6>
magic[UNRESOLVED_CALL](---------------|<v6>) -> <v7>
magic[UNRESOLVED_CALL](-----------------|<v7>) -> <v8>
magic[UNRESOLVED_CALL](-------------------|<v8>) -> <v9>
magic[UNRESOLVED_CALL](---------------------|<v9>) -> <v10>
magic[UNRESOLVED_CALL](-----------------------|<v10>) -> <v11>
magic[UNRESOLVED_CALL](-------------------------|<v11>) -> <v12>
magic[UNRESOLVED_CALL](---------------------------|<v12>) -> <v13>
magic[UNRESOLVED_CALL](-----------------------------|<v13>) -> <v14>
magic[UNRESOLVED_CALL](-------------------------------|<v14>) -> <v15>
magic[UNRESOLVED_CALL](---------------------------------|<v15>) -> <v16>
magic[UNRESOLVED_CALL](-----------------------------------|<v16>) -> <v17>
mark("")
r("") -> <v18>
mark(split(-----------------------------------))
magic[UNRESOLVED_CALL](split(-----------------------------------)|<v17>, !<v19>, <v18>) -> <v20>
L1:
1 <END> NEXT:[<SINK>]
error:
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
+9
View File
@@ -0,0 +1,9 @@
// ISSUE: KT-44153
fun crash_1() {
"".split(----------------------------------)
}
fun crash_2() {
"".split(-----------------------------------)
}
+57
View File
@@ -0,0 +1,57 @@
== crash_1 ==
fun crash_1() {
"".split(----------------------------------)
}
---------------------
"" <v17>: * NEW: r("") -> <v17>
split !<v18>: *
-- !<v0>: *
---- <v1>: * NEW: magic[UNRESOLVED_CALL](----|!<v0>) -> <v1>
------ <v2>: * NEW: magic[UNRESOLVED_CALL](------|<v1>) -> <v2>
-------- <v3>: * NEW: magic[UNRESOLVED_CALL](--------|<v2>) -> <v3>
---------- <v4>: * NEW: magic[UNRESOLVED_CALL](----------|<v3>) -> <v4>
------------ <v5>: * NEW: magic[UNRESOLVED_CALL](------------|<v4>) -> <v5>
-------------- <v6>: * NEW: magic[UNRESOLVED_CALL](--------------|<v5>) -> <v6>
---------------- <v7>: * NEW: magic[UNRESOLVED_CALL](----------------|<v6>) -> <v7>
------------------ <v8>: * NEW: magic[UNRESOLVED_CALL](------------------|<v7>) -> <v8>
-------------------- <v9>: * NEW: magic[UNRESOLVED_CALL](--------------------|<v8>) -> <v9>
---------------------- <v10>: * NEW: magic[UNRESOLVED_CALL](----------------------|<v9>) -> <v10>
------------------------ <v11>: * NEW: magic[UNRESOLVED_CALL](------------------------|<v10>) -> <v11>
-------------------------- <v12>: * NEW: magic[UNRESOLVED_CALL](--------------------------|<v11>) -> <v12>
---------------------------- <v13>: * NEW: magic[UNRESOLVED_CALL](----------------------------|<v12>) -> <v13>
------------------------------ <v14>: * NEW: magic[UNRESOLVED_CALL](------------------------------|<v13>) -> <v14>
-------------------------------- <v15>: * NEW: magic[UNRESOLVED_CALL](--------------------------------|<v14>) -> <v15>
---------------------------------- <v16>: * NEW: magic[UNRESOLVED_CALL](----------------------------------|<v15>) -> <v16>
split(----------------------------------) <v19>: * NEW: magic[UNRESOLVED_CALL](split(----------------------------------)|<v16>, !<v18>, <v17>) -> <v19>
"".split(----------------------------------) <v19>: * COPY
{ "".split(----------------------------------) } <v19>: * COPY
=====================
== crash_2 ==
fun crash_2() {
"".split(-----------------------------------)
}
---------------------
"" <v18>: * NEW: r("") -> <v18>
split !<v19>: *
- !<v0>: *
--- <v1>: * NEW: magic[UNRESOLVED_CALL](---|!<v0>) -> <v1>
----- <v2>: * NEW: magic[UNRESOLVED_CALL](-----|<v1>) -> <v2>
------- <v3>: * NEW: magic[UNRESOLVED_CALL](-------|<v2>) -> <v3>
--------- <v4>: * NEW: magic[UNRESOLVED_CALL](---------|<v3>) -> <v4>
----------- <v5>: * NEW: magic[UNRESOLVED_CALL](-----------|<v4>) -> <v5>
------------- <v6>: * NEW: magic[UNRESOLVED_CALL](-------------|<v5>) -> <v6>
--------------- <v7>: * NEW: magic[UNRESOLVED_CALL](---------------|<v6>) -> <v7>
----------------- <v8>: * NEW: magic[UNRESOLVED_CALL](-----------------|<v7>) -> <v8>
------------------- <v9>: * NEW: magic[UNRESOLVED_CALL](-------------------|<v8>) -> <v9>
--------------------- <v10>: * NEW: magic[UNRESOLVED_CALL](---------------------|<v9>) -> <v10>
----------------------- <v11>: * NEW: magic[UNRESOLVED_CALL](-----------------------|<v10>) -> <v11>
------------------------- <v12>: * NEW: magic[UNRESOLVED_CALL](-------------------------|<v11>) -> <v12>
--------------------------- <v13>: * NEW: magic[UNRESOLVED_CALL](---------------------------|<v12>) -> <v13>
----------------------------- <v14>: * NEW: magic[UNRESOLVED_CALL](-----------------------------|<v13>) -> <v14>
------------------------------- <v15>: * NEW: magic[UNRESOLVED_CALL](-------------------------------|<v14>) -> <v15>
--------------------------------- <v16>: * NEW: magic[UNRESOLVED_CALL](---------------------------------|<v15>) -> <v16>
----------------------------------- <v17>: * NEW: magic[UNRESOLVED_CALL](-----------------------------------|<v16>) -> <v17>
split(-----------------------------------) <v20>: * NEW: magic[UNRESOLVED_CALL](split(-----------------------------------)|<v17>, !<v19>, <v18>) -> <v20>
"".split(-----------------------------------) <v20>: * COPY
{ "".split(-----------------------------------) } <v20>: * COPY
=====================