Skip to content
Snippets Groups Projects
Commit e3f264a2 authored by David Bühler's avatar David Bühler
Browse files

[Kernel] Minor simplification in unroll_loops; replaces a fatal by a warning.

parent d0f96b1f
No related branches found
No related tags found
No related merge requests found
Showing with 48 additions and 40 deletions
...@@ -50,15 +50,8 @@ let update_info global_find_init emitter info spec = ...@@ -50,15 +50,8 @@ let update_info global_find_init emitter info spec =
(new Logic_utils.simplify_const_lval global_find_init) spec (new Logic_utils.simplify_const_lval global_find_init) spec
in in
let i = Logic_utils.constFoldTermToInt t in let i = Logic_utils.constFoldTermToInt t in
match i with match Option.bind i Integer.to_int_opt with
| Some i -> | Some _ as unroll_number -> { info with unroll_number }
begin
match Integer.to_int_opt i with
| Some _ as unroll_number -> { info with unroll_number }
| None -> Kernel.abort ~current:true
"count too large in unrolling directive: %a"
(Integer.pretty ~hexa:false) i
end
| None -> | None ->
Kernel.warning ~once:true ~current:true Kernel.warning ~once:true ~current:true
"ignoring unrolling directive (not an understood constant \ "ignoring unrolling directive (not an understood constant \
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:16: User Error: [kernel] tests/syntax/very_large_integers.c:18: User Error:
integer constant too large in expression (unsigned long long)999999999999999999 + 9999999999999999999 integer constant too large in expression (unsigned long long)999999999999999999 + 9999999999999999999
[kernel] tests/syntax/very_large_integers.c:17: User Error: [kernel] tests/syntax/very_large_integers.c:19: User Error:
bitfield width is not a valid integer constant bitfield width is not a valid integer constant
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__(9223372036854775808) ignoring invalid aligned attribute: __aligned__(9223372036854775808)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__((9223372036854775808)+ ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
(9223372036854775808) ) (9223372036854775808) )
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:23: User Error: [kernel] tests/syntax/very_large_integers.c:25: User Error:
invalid integer constant: 99999999999999999999U invalid integer constant: 99999999999999999999U
[kernel] tests/syntax/very_large_integers.c:23: User Error: [kernel] tests/syntax/very_large_integers.c:25: User Error:
invalid integer constant: 99999999999999999999U invalid integer constant: 99999999999999999999U
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__(9223372036854775808) ignoring invalid aligned attribute: __aligned__(9223372036854775808)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__((9223372036854775808)+ ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
(9223372036854775808) ) (9223372036854775808) )
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:29: User Error: [kernel] tests/syntax/very_large_integers.c:31: User Error:
integer constant too large in expression 9999999999999999999U integer constant too large in expression 9999999999999999999U
[kernel] tests/syntax/very_large_integers.c:29: Failure: [kernel] tests/syntax/very_large_integers.c:31: Failure:
Cannot understand the constants in case range Cannot understand the constants in case range
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
'-kernel-msg-key pp' for preprocessing command. '-kernel-msg-key pp' for preprocessing command.
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:34: Failure: [kernel] tests/syntax/very_large_integers.c:36: Failure:
Array length 9999999999999999999U is not a compile-time constant: no explicit initializer allowed. Array length 9999999999999999999U is not a compile-time constant: no explicit initializer allowed.
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
'-kernel-msg-key pp' for preprocessing command. '-kernel-msg-key pp' for preprocessing command.
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:38: User Error: [kernel] tests/syntax/very_large_integers.c:40: User Error:
INDEX initialization designator overflows INDEX initialization designator overflows
36 38
37 #ifdef INIT_DESIGNATOR2 39 #ifdef INIT_DESIGNATOR2
38 int arr3[1] = { [9999999999999999999U] = 42 }; 40 int arr3[1] = { [9999999999999999999U] = 42 };
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39 #endif 41 #endif
40 42
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
'-kernel-msg-key pp' for preprocessing command. '-kernel-msg-key pp' for preprocessing command.
[kernel] Frama-C aborted: invalid user input. [kernel] Frama-C aborted: invalid user input.
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:42: User Error: [kernel] tests/syntax/very_large_integers.c:44: User Error:
integer constant too large in expression -9999999999999999999U integer constant too large in expression -9999999999999999999U
[kernel] tests/syntax/very_large_integers.c:42: User Error: [kernel] tests/syntax/very_large_integers.c:44: User Error:
integer constant too large in expression 9999999999999999999U integer constant too large in expression 9999999999999999999U
[kernel] tests/syntax/very_large_integers.c:42: Failure: [kernel] tests/syntax/very_large_integers.c:44: Failure:
INDEX_RANGE initialization designator is not a valid constant INDEX_RANGE initialization designator is not a valid constant
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
'-kernel-msg-key pp' for preprocessing command. '-kernel-msg-key pp' for preprocessing command.
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:46: User Error: [kernel] tests/syntax/very_large_integers.c:48: User Error:
Invalid attribute constant: 0x80000000000000000 Invalid attribute constant: 0x80000000000000000
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__(9223372036854775808) ignoring invalid aligned attribute: __aligned__(9223372036854775808)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__((9223372036854775808)+ ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
(9223372036854775808) ) (9223372036854775808) )
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__(9223372036854775808) ignoring invalid aligned attribute: __aligned__(9223372036854775808)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__((9223372036854775808)+ ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
(9223372036854775808) ) (9223372036854775808) )
[kernel:annot-error] tests/syntax/very_large_integers.c:65: Warning: [kernel:annot-error] tests/syntax/very_large_integers.c:67: Warning:
Invalid slevel directive. Ignoring code annotation Invalid slevel directive. Ignoring code annotation
[kernel] User Error: warning annot-error treated as fatal error. [kernel] User Error: warning annot-error treated as fatal error.
[kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add [kernel] User Error: stopping on file "tests/syntax/very_large_integers.c" that has errors. Add
......
[kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing) [kernel] Parsing tests/syntax/very_large_integers.c (with preprocessing)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__(9223372036854775808) ignoring invalid aligned attribute: __aligned__(9223372036854775808)
[kernel] tests/syntax/very_large_integers.c:51: Warning: [kernel] tests/syntax/very_large_integers.c:53: Warning:
ignoring invalid aligned attribute: __aligned__((9223372036854775808)+ ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
(9223372036854775808) ) (9223372036854775808) )
[kernel] tests/syntax/very_large_integers.c:71: User Error: [kernel] tests/syntax/very_large_integers.c:73: Warning:
count too large in unrolling directive: 99999999999999999999 ignoring unrolling directive (not an understood constant expression)
[kernel] Frama-C aborted: invalid user input. /* Generated by Frama-C */
int volatile nondet;
/*@ logic ℤ too_large_integer= 9999999999999999999;
*/
int main(void)
{
int __retres;
/*@ loop pragma UNROLL 99999999999999999999; */
while (nondet) ;
__retres = 0;
return __retres;
}
/* run.config /* run.config
PLUGIN: @EVA_PLUGINS@
EXIT: 1 EXIT: 1
STDOPT: #"-cpp-extra-args=-DBITFIELD" STDOPT: #"-cpp-extra-args=-DBITFIELD"
STDOPT: #"-cpp-extra-args=-DARRAY_DECL" STDOPT: #"-cpp-extra-args=-DARRAY_DECL"
...@@ -8,6 +9,7 @@ ...@@ -8,6 +9,7 @@
STDOPT: #"-cpp-extra-args=-DRANGE_DESIGNATOR" STDOPT: #"-cpp-extra-args=-DRANGE_DESIGNATOR"
STDOPT: #"-cpp-extra-args=-DATTRIBUTE_CONSTANT" STDOPT: #"-cpp-extra-args=-DATTRIBUTE_CONSTANT"
STDOPT: #"-cpp-extra-args=-DEVA_UNROLL -eva" STDOPT: #"-cpp-extra-args=-DEVA_UNROLL -eva"
EXIT: 0
STDOPT: #"-cpp-extra-args=-DUNROLL_PRAGMA" STDOPT: #"-cpp-extra-args=-DUNROLL_PRAGMA"
*/ */
volatile int nondet; volatile int nondet;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment