Skip to content

Commit dd8a636

Browse files
committed
--vsd-union top-bottom
1 parent b031a9f commit dd8a636

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

src/analyses/variable-sensitivity/variable_sensitivity_object_factory.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ vsd_configt vsd_configt::from_options(const optionst &options)
5252
ARRAY_INSENSITIVE
5353
);
5454

55+
config.union_abstract_type = option_to_abstract_type(
56+
options,
57+
"unions",
58+
union_option_mappings,
59+
UNION_INSENSITIVE
60+
);
61+
5562
// This should always be on (for efficeny with 3-way merge)
5663
// Does not work with value set
5764
config.context_tracking.last_write_context =
@@ -119,6 +126,10 @@ const vsd_configt::option_mappingt vsd_configt::array_option_mappings = {
119126
{ "every-element", ARRAY_SENSITIVE }
120127
};
121128

129+
const vsd_configt::option_mappingt vsd_configt::union_option_mappings = {
130+
{ "top-bottom", UNION_INSENSITIVE }
131+
};
132+
122133
invalid_command_line_argument_exceptiont vsd_configt::invalid_argument(
123134
const std::string& option_name,
124135
const std::string& bad_argument,
@@ -262,7 +273,7 @@ variable_sensitivity_object_factoryt::get_abstract_object_type(const typet& type
262273
}
263274
else if(type.id() == ID_union)
264275
{
265-
abstract_object_type = UNION_INSENSITIVE;
276+
return configuration.union_abstract_type;
266277
}
267278

268279
return abstract_object_type;

src/analyses/variable-sensitivity/variable_sensitivity_object_factory.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct vsd_configt
5353
ABSTRACT_OBJECT_TYPET pointer_abstract_type;
5454
ABSTRACT_OBJECT_TYPET struct_abstract_type;
5555
ABSTRACT_OBJECT_TYPET array_abstract_type;
56+
ABSTRACT_OBJECT_TYPET union_abstract_type;
5657

5758
struct
5859
{
@@ -91,6 +92,7 @@ struct vsd_configt
9192
static const option_mappingt pointer_option_mappings;
9293
static const option_mappingt struct_option_mappings;
9394
static const option_mappingt array_option_mappings;
95+
static const option_mappingt union_option_mappings;
9496
};
9597

9698
class variable_sensitivity_object_factoryt;

src/goto-analyzer/goto_analyzer_parse_options.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ void goto_analyzer_parse_optionst::get_command_line_options(optionst &options)
372372
options.set_option("pointers", cmdline.get_value("vsd-pointers"));
373373
options.set_option("arrays", cmdline.get_value("vsd-arrays"));
374374
options.set_option("structs", cmdline.get_value("vsd-structs"));
375+
options.set_option("unions", cmdline.get_value("vsd-unions"));
375376
options.set_option(
376377
"data-dependencies", cmdline.isset("vsd-data-dependencies"));
377378
}
@@ -385,6 +386,7 @@ void goto_analyzer_parse_optionst::get_command_line_options(optionst &options)
385386
options.set_option("pointers", cmdline.get_value("vsd-pointers"));
386387
options.set_option("arrays", cmdline.get_value("vsd-arrays"));
387388
options.set_option("structs", cmdline.get_value("vsd-structs"));
389+
options.set_option("unions", cmdline.get_value("vsd-unions"));
388390
options.set_option("data-dependencies", true);
389391
}
390392

@@ -995,6 +997,7 @@ void goto_analyzer_parse_optionst::help()
995997
" --vsd-structs struct field sensitive analysis - top-bottom|every-field\n"
996998
" --vsd-arrays array entry sensitive analysis - top-bottom|every-element\n"
997999
" --vsd-pointers pointer sensitive analysis - top-bottom|constants|value-set\n"
1000+
" --vsd-unions union sensitive analysis - top-bottom\n"
9981001
" --vsd-data-dependencies track data dependencies\n"
9991002
"\n"
10001003
"Storage options:\n"

src/goto-analyzer/goto_analyzer_parse_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class optionst;
139139
"(vsd-structs):" \
140140
"(vsd-arrays):" \
141141
"(vsd-pointers):" \
142+
"(vsd-unions):" \
142143
"(vsd-data-dependencies)"
143144

144145
#define GOTO_ANALYSER_OPTIONS_STORAGE \

0 commit comments

Comments
 (0)