summaryrefslogtreecommitdiff
path: root/startop/view_compiler/dex_testcase_generator.cc
diff options
context:
space:
mode:
authorEric Holk <eholk@google.com>2018-12-17 13:35:34 -0800
committerEric Holk <eholk@google.com>2018-12-18 16:47:05 +0000
commit44d8cdfb06233b3a6322c00b9b4650fd31a56a0f (patch)
treec305de276a0a9fa7ef089e368bb1647d9231ccad /startop/view_compiler/dex_testcase_generator.cc
parent610673690c4a91afbc8f6d81e8aa80667d683316 (diff)
[view-compiler] DexBuilder: Add check-cast instruction
Bug: 111895153 Test: atest Change-Id: I767e56713fab6beaa6970e58c4fc4d3560cc1304
Diffstat (limited to 'startop/view_compiler/dex_testcase_generator.cc')
-rw-r--r--startop/view_compiler/dex_testcase_generator.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/startop/view_compiler/dex_testcase_generator.cc b/startop/view_compiler/dex_testcase_generator.cc
index 2781aa55d1df..f62ec5dde85e 100644
--- a/startop/view_compiler/dex_testcase_generator.cc
+++ b/startop/view_compiler/dex_testcase_generator.cc
@@ -269,6 +269,19 @@ void GenerateSimpleTestCases(const string& outdir) {
method.Encode();
}(invokeVirtualReturnObject);
+ // Make sure we can cast objects
+ // String castObjectToString(Object o) { return (String)o; }
+ MethodBuilder castObjectToString{cbuilder.CreateMethod(
+ "castObjectToString",
+ Prototype{string_type, TypeDescriptor::FromClassname("java.lang.Object")})};
+ [&](MethodBuilder& method) {
+ const ir::Type* type_def = dex_file.GetOrAddType(string_type.descriptor());
+ method.AddInstruction(
+ Instruction::Cast(Value::Parameter(0), Value::Type(type_def->orig_index)));
+ method.BuildReturn(Value::Parameter(0), /*is_object=*/true);
+ method.Encode();
+ }(castObjectToString);
+
slicer::MemView image{dex_file.CreateImage()};
std::ofstream out_file(outdir + "/simple.dex");
out_file.write(image.ptr<const char>(), image.size());