Skip to content

Commit 933eb5e

Browse files
committed
Add a disable option for enum-range-check
1 parent 85b90f3 commit 933eb5e

File tree

6 files changed

+35
-2
lines changed

6 files changed

+35
-2
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <stdio.h>
2+
3+
enum day
4+
{
5+
sunday = 1,
6+
monday,
7+
tuesday = 5,
8+
wednesday,
9+
thursday = 10,
10+
friday,
11+
saturday
12+
};
13+
14+
int main()
15+
{
16+
#pragma CPROVER check push
17+
#pragma CPROVER check disable "enum-range"
18+
enum day temp = 100;
19+
printf("%d\n", temp);
20+
#pragma CPROVER check pop
21+
return 0;
22+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
--enum-range-check
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^warning: ignoring

src/analyses/goto_check.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1843,6 +1843,8 @@ void goto_checkt::goto_check(
18431843
flag_resetter.set_flag(enable_memory_leak_check, false);
18441844
else if(d.first == "disable:div-by-zero-check")
18451845
flag_resetter.set_flag(enable_div_by_zero_check, false);
1846+
else if(d.first == "disable:enum-range-check")
1847+
flag_resetter.set_flag(enable_enum_range_check, false);
18461848
else if(d.first == "disable:signed-overflow-check")
18471849
flag_resetter.set_flag(enable_signed_overflow_check, false);
18481850
else if(d.first == "disable:unsigned-overflow-check")

src/analyses/goto_check.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void goto_check(
5454
" --float-overflow-check check floating-point for +/-Inf\n" \
5555
" --nan-check check floating-point for NaN\n" \
5656
" --no-built-in-assertions ignore assertions in built-in library\n" \
57+
" --enum-range-check checks that all enum type expressions have values in the enum range\n" /* NOLINT(whitespace/line_length) */ \
5758
// clang-format on
5859

5960
#define PARSE_OPTIONS_GOTO_CHECK(cmdline, options) \

src/ansi-c/scanner.l

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,10 @@ string_lit ("L"|"u"|"U"|"u8")?["]{s_char}*["]
235235
CPROVER_PREFIX "__CPROVER_"
236236

237237
arith_check ("conversion"|"undefined-shift"|"nan"|"div-by-zero")
238+
enum_check "enum-range"
238239
memory_check ("bounds"|"pointer"|"memory_leak")
239240
overflow_check ("signed"|"unsigned"|"pointer"|"float")"-overflow"
240-
named_check ["]({arith_check}|{memory_check}|{overflow_check})["]
241+
named_check ["]({arith_check}|{enum_check}|{memory_check}|{overflow_check})["]
241242

242243
%x GRAMMAR
243244
%x COMMENT1

src/goto-instrument/goto_instrument_parse_options.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,6 @@ void goto_instrument_parse_optionst::help()
16241624
"Safety checks:\n"
16251625
" --no-assertions ignore user assertions\n"
16261626
HELP_GOTO_CHECK
1627-
" --enum-range-check checks that all enum type expressions have values in the enum range\n" // NOLINT(*)
16281627
" --uninitialized-check add checks for uninitialized locals (experimental)\n" // NOLINT(*)
16291628
" --error-label label check that label is unreachable\n"
16301629
" --stack-depth n add check that call stack size of non-inlined functions never exceeds n\n" // NOLINT(*)

0 commit comments

Comments
 (0)