Skip to content

Commit c63c167

Browse files
Merge pull request #4767 from jeannielynnmoulton/jeannie/UserSpecifiedClinitCheck
Function and test for identifier of user specified clinit [TG-7981]
2 parents 3674639 + b4b4c99 commit c63c167

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

jbmc/src/java_bytecode/java_static_initializers.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ bool is_clinit_function(const irep_idt &function_id)
8888
return has_suffix(id2string(function_id), clinit_function_suffix);
8989
}
9090

91+
/// Check if function_id is a user-specified clinit
92+
/// \param function_id: some function identifier
93+
/// \return true if the passed identifier is a clinit
94+
bool is_user_specified_clinit_function(const irep_idt &function_id)
95+
{
96+
return has_suffix(id2string(function_id), user_specified_clinit_suffix);
97+
}
98+
9199
/// Add a new symbol to the symbol table.
92100
/// Note: assumes that a symbol with this name does not exist.
93101
/// /param name: name of the symbol to be generated

jbmc/src/java_bytecode/java_static_initializers.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ irep_idt user_specified_clinit_name(const irep_idt &class_name);
2626

2727
bool is_clinit_wrapper_function(const irep_idt &function_id);
2828
bool is_clinit_function(const irep_idt &function_id);
29+
bool is_user_specified_clinit_function(const irep_idt &function_id);
2930

3031
void create_static_initializer_symbols(
3132
symbol_tablet &symbol_table,
Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************\
22
3-
Module: Unit tests for java_types
3+
Module: Unit tests for java_static_initializers
44
55
Author: Diffblue Ltd.
66
@@ -12,15 +12,43 @@ Author: Diffblue Ltd.
1212
SCENARIO("is_clinit_function", "[core][java_static_initializers]")
1313
{
1414
GIVEN("A function id that represents a clinit")
15-
THEN("is_clinit_function should return true.")
1615
{
17-
const std::string input = "com.something.package.TestClass.<clinit>:()V";
18-
REQUIRE(is_clinit_function(input));
16+
THEN("is_clinit_function should return true.")
17+
{
18+
const std::string input = "com.something.package.TestClass.<clinit>:()V";
19+
REQUIRE(is_clinit_function(input));
20+
}
1921
}
2022
GIVEN("A function id that does not represent a clinit")
21-
THEN("is_clinit_function should return false.")
2223
{
23-
const std::string input = "com.something.package.TestClass.<notclinit>:()V";
24-
REQUIRE_FALSE(is_clinit_function(input));
24+
THEN("is_clinit_function should return false.")
25+
{
26+
const std::string input =
27+
"com.something.package.TestClass.<notclinit>:()V";
28+
REQUIRE_FALSE(is_clinit_function(input));
29+
}
30+
}
31+
}
32+
33+
SCENARIO(
34+
"is_user_specified_clinit_function",
35+
"[core][java_static_initializers]")
36+
{
37+
GIVEN("A function id that represents a user-specified clinit")
38+
{
39+
THEN("is_user_specified_clinit_function should return true.")
40+
{
41+
const std::string input =
42+
"com.something.package.TestClass::user_specified_clinit";
43+
REQUIRE(is_user_specified_clinit_function(input));
44+
}
45+
}
46+
GIVEN("A function id that does not represent a user-specified clinit")
47+
{
48+
THEN("is_clinit_function should return false.")
49+
{
50+
const std::string input = "com.something.package.TestClass::not_it";
51+
REQUIRE_FALSE(is_user_specified_clinit_function(input));
52+
}
2553
}
2654
}

0 commit comments

Comments
 (0)