summaryrefslogtreecommitdiffstats
path: root/test/801-VoidCheckCast
diff options
context:
space:
mode:
authorStephen Kyle <stephen.kyle@arm.com>2014-10-03 13:47:56 +0100
committerStephen Kyle <stephen.kyle@arm.com>2014-11-07 12:51:33 +0000
commit40d3518414202f33c9569ddd8daceabb30208fc2 (patch)
treea28dd757a6a9d212a8d2feb3dfdbcfe584e18c6d /test/801-VoidCheckCast
parent88af00a788002196e6f98acd3748f3f4956032bf (diff)
downloadart-40d3518414202f33c9569ddd8daceabb30208fc2.tar.gz
art-40d3518414202f33c9569ddd8daceabb30208fc2.tar.bz2
art-40d3518414202f33c9569ddd8daceabb30208fc2.zip
ART: Fix crash with unreachable void check-cast
return-void check-cast v0, V return-void The above code sequence will not be rejected for the check-cast of a void type because the check-cast is not reachable. However, when GenerateSafeCastSet() is called from the compiler, this will cause IsAssignableFrom(Conflict, Undefined) to be called, as it scans for all check-casts across the code, regardless of its reachableness. RegType::AssignableFrom() has been changed to handle a Conflict type, whereas previously this would break the check that the lhs type is a ReferenceType. Additionally, GenerateSafeCastSet has been changed to never assess instructions that weren't visited during verification. Included is a new test DEX file, 801-VoidCheckCast, that uses this code sequence. Change-Id: I600055ab670ee48a075ffa867b46d2e74f5aa9c0 Signed-off-by: Stephen Kyle <stephen.kyle@arm.com>
Diffstat (limited to 'test/801-VoidCheckCast')
-rw-r--r--test/801-VoidCheckCast/classes.dexbin0 -> 660 bytes
-rw-r--r--test/801-VoidCheckCast/expected.txt0
-rw-r--r--test/801-VoidCheckCast/info.txt4
3 files changed, 4 insertions, 0 deletions
diff --git a/test/801-VoidCheckCast/classes.dex b/test/801-VoidCheckCast/classes.dex
new file mode 100644
index 0000000000..e6f0f02967
--- /dev/null
+++ b/test/801-VoidCheckCast/classes.dex
Binary files differ
diff --git a/test/801-VoidCheckCast/expected.txt b/test/801-VoidCheckCast/expected.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/801-VoidCheckCast/expected.txt
diff --git a/test/801-VoidCheckCast/info.txt b/test/801-VoidCheckCast/info.txt
new file mode 100644
index 0000000000..422f740715
--- /dev/null
+++ b/test/801-VoidCheckCast/info.txt
@@ -0,0 +1,4 @@
+A test that is only available as a DEX binary.
+
+This tests that an attempt to use check-cast with the void type doesn't
+cause the compiler to crash.