Skip to content

Commit

Permalink
Clean up ArrayNullnessDomain instantiation
Browse files Browse the repository at this point in the history
Summary: We do not instantiate `ArrayNullnessDomain` for NEW_ARRAY anymore. However, there is still a remaining instantiation in `RegisterTypeAnalyzer::analyze_invoke` that should be effectively dead code.

Reviewed By: ssj933

Differential Revision: D51687648

fbshipit-source-id: edc955de7069958fa6eca8d7ce95b220d650bfd8
  • Loading branch information
Wei Zhang (Devinfra) authored and facebook-github-bot committed Dec 1, 2023
1 parent 938d9d8 commit a83e777
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 61 deletions.
7 changes: 0 additions & 7 deletions libredex/DexTypeEnvironment.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,6 @@ class DexTypeDomain final
SmallSetDexTypeDomain::top(),
TypedefAnnotationDomain())) {}

explicit DexTypeDomain(const DexType* array_type, uint32_t array_length)
: ReducedProductAbstractDomain(
std::make_tuple(ArrayNullnessDomain(array_length),
SingletonDexTypeDomain(array_type),
SmallSetDexTypeDomain(array_type),
TypedefAnnotationDomain())) {}

explicit DexTypeDomain(const DexType* dex_type,
const DexAnnoType* annotation = nullptr)
: ReducedProductAbstractDomain(
Expand Down
3 changes: 1 addition & 2 deletions service/type-analysis/LocalTypeAnalyzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,8 +370,7 @@ bool RegisterTypeAnalyzer::analyze_invoke(const IRInstruction* insn,
env->transform([&](const DexTypeDomain& domain) {
auto dex_type_local = domain.get_dex_type();
if (dex_type_local && *dex_type == *dex_type_local) {
return DexTypeDomain(*dex_type_local,
domain.get_nullness().element());
return DexTypeDomain(*dex_type_local, NN_TOP, false);
}
return domain;
});
Expand Down
52 changes: 0 additions & 52 deletions test/unit/type-analysis/DexTypeEnvironmentTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1090,58 +1090,6 @@ TEST_F(DexTypeEnvironmentTest, ArrayNullnessDomainTest) {
EXPECT_TRUE(a1.get_element(1).is_top());
}

TEST_F(DexTypeEnvironmentTest, ArrayConstNullnessDomain) {
auto array1 = DexTypeDomain(m_string_array, 1);
EXPECT_EQ(array1.get_array_nullness().get_nullness(),
NullnessDomain(NOT_NULL));
EXPECT_EQ(*array1.get_array_nullness().get_length(), 1);
EXPECT_EQ(array1.get_array_element_nullness(0),
NullnessDomain(UNINITIALIZED));

array1.set_array_element_nullness(0, NullnessDomain(NOT_NULL));
EXPECT_EQ(array1.get_array_element_nullness(0), NullnessDomain(NOT_NULL));
EXPECT_TRUE(array1.get_array_element_nullness(1).is_top());

array1.set_array_element_nullness(1, NullnessDomain(NOT_NULL));
EXPECT_TRUE(array1.get_array_element_nullness(1).is_top());

EXPECT_TRUE(array1.get_array_element_nullness(-1).is_top());
array1.set_array_element_nullness(-1, NullnessDomain(NOT_NULL));
EXPECT_TRUE(array1.get_array_nullness().get_elements().is_top());

auto array2 = DexTypeDomain(m_string_array, 2);
EXPECT_EQ(array2.get_array_nullness().get_nullness(),
NullnessDomain(NOT_NULL));
EXPECT_EQ(*array2.get_array_nullness().get_length(), 2);
EXPECT_EQ(array2.get_array_element_nullness(0),
NullnessDomain(UNINITIALIZED));
EXPECT_EQ(array2.get_array_element_nullness(1),
NullnessDomain(UNINITIALIZED));
array2.set_array_element_nullness(0, NullnessDomain(NOT_NULL));
array2.set_array_element_nullness(1, NullnessDomain(NOT_NULL));
EXPECT_EQ(array2.get_array_element_nullness(0), NullnessDomain(NOT_NULL));
EXPECT_EQ(array2.get_array_element_nullness(1), NullnessDomain(NOT_NULL));

array1.join_with(array2);
EXPECT_EQ(array2.get_array_nullness().get_nullness(),
NullnessDomain(NOT_NULL));
EXPECT_TRUE(array1.get_array_nullness().get<1>().is_top());
EXPECT_TRUE(array1.get_array_nullness().get_elements().is_top());

// DisjoinUnion crossing access
EXPECT_FALSE(DexTypeDomain::top().get_constant());
EXPECT_EQ(*DexTypeDomain::null().get_constant(), 0);
EXPECT_FALSE(DexTypeDomain(m_string_array, 3).get_constant());
EXPECT_FALSE(DexTypeDomain(m_string_array).get_constant());

EXPECT_TRUE(DexTypeDomain::top().get_array_nullness().is_top());
EXPECT_TRUE(DexTypeDomain::null().get_array_nullness().is_top());
EXPECT_FALSE(DexTypeDomain(m_string_array, 3).get_array_nullness().is_top());
EXPECT_FALSE(
DexTypeDomain(m_string_array, 3).get_array_nullness().is_bottom());
EXPECT_TRUE(DexTypeDomain(m_string_array).get_array_nullness().is_top());
}

TEST_F(DexTypeEnvironmentTest, BaseClassInterfaceJoinTest) {
auto abs_me = SingletonDexTypeDomain(m_abs_map_entry);
auto intf = SingletonDexTypeDomain(m_map_entry);
Expand Down

0 comments on commit a83e777

Please sign in to comment.