diff options
author | Stephen Kyle <stephen.kyle@arm.com> | 2014-10-03 13:47:56 +0100 |
---|---|---|
committer | Stephen Kyle <stephen.kyle@arm.com> | 2014-11-07 12:51:33 +0000 |
commit | 40d3518414202f33c9569ddd8daceabb30208fc2 (patch) | |
tree | a28dd757a6a9d212a8d2feb3dfdbcfe584e18c6d /test/801-VoidCheckCast | |
parent | 88af00a788002196e6f98acd3748f3f4956032bf (diff) | |
download | art-40d3518414202f33c9569ddd8daceabb30208fc2.zip art-40d3518414202f33c9569ddd8daceabb30208fc2.tar.gz art-40d3518414202f33c9569ddd8daceabb30208fc2.tar.bz2 |
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.dex | bin | 0 -> 660 bytes | |||
-rw-r--r-- | test/801-VoidCheckCast/expected.txt | 0 | ||||
-rw-r--r-- | test/801-VoidCheckCast/info.txt | 4 |
3 files changed, 4 insertions, 0 deletions
diff --git a/test/801-VoidCheckCast/classes.dex b/test/801-VoidCheckCast/classes.dex Binary files differnew file mode 100644 index 0000000..e6f0f02 --- /dev/null +++ b/test/801-VoidCheckCast/classes.dex diff --git a/test/801-VoidCheckCast/expected.txt b/test/801-VoidCheckCast/expected.txt new file mode 100644 index 0000000..e69de29 --- /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 0000000..422f740 --- /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. |