diff options
author | Eric Holk <eholk@google.com> | 2018-12-17 13:35:34 -0800 |
---|---|---|
committer | Eric Holk <eholk@google.com> | 2018-12-18 16:47:05 +0000 |
commit | 44d8cdfb06233b3a6322c00b9b4650fd31a56a0f (patch) | |
tree | c305de276a0a9fa7ef089e368bb1647d9231ccad /startop/view_compiler/dex_testcase_generator.cc | |
parent | 610673690c4a91afbc8f6d81e8aa80667d683316 (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.cc | 13 |
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()); |