@@ -491,14 +491,14 @@ quantifier_expression:
491
491
}
492
492
;
493
493
494
- loop_invariant_opt :
494
+ cprover_contract_invariant_opt :
495
495
/* nothing */
496
496
{ init($$ ); parser_stack($$ ).make_nil(); }
497
497
| TOK_CPROVER_LOOP_INVARIANT ' (' ACSL_binding_expression ' )'
498
498
{ $$ =$3 ; }
499
499
;
500
500
501
- cprover_decreases_opt :
501
+ cprover_contract_decreases_opt :
502
502
/* nothing */
503
503
{ init($$ ); parser_stack($$ ).make_nil(); }
504
504
| TOK_CPROVER_DECREASES ' (' ACSL_binding_expression ' )'
@@ -2426,31 +2426,36 @@ declaration_or_expression_statement:
2426
2426
2427
2427
iteration_statement:
2428
2428
TOK_WHILE ' (' comma_expression_opt ' )'
2429
- loop_invariant_opt cprover_decreases_opt
2429
+
2430
+ cprover_contract_assigns_opt
2431
+ cprover_contract_invariant_opt
2432
+ cprover_contract_decreases_opt
2430
2433
statement
2431
2434
{
2432
2435
$$=$1 ;
2433
2436
statement ($$, ID_while);
2434
- parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($7 )));
2435
-
2436
- if (parser_stack ($5 ).is_not_nil ())
2437
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($5 ));
2437
+ parser_stack ($$).add_to_operands (std::move (parser_stack ($3 )), std::move (parser_stack ($8 )));
2438
2438
2439
2439
if (parser_stack ($6 ).is_not_nil ())
2440
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($6 ));
2440
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($6 ));
2441
+
2442
+ if (parser_stack ($7 ).is_not_nil ())
2443
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($7 ));
2441
2444
}
2442
2445
| TOK_DO statement TOK_WHILE ' (' comma_expression ' )'
2443
- loop_invariant_opt cprover_decreases_opt ' ;'
2446
+ cprover_contract_assigns_opt
2447
+ cprover_contract_invariant_opt
2448
+ cprover_contract_decreases_opt ' ;'
2444
2449
{
2445
2450
$$=$1 ;
2446
2451
statement ($$, ID_dowhile);
2447
2452
parser_stack ($$).add_to_operands (std::move (parser_stack ($5 )), std::move (parser_stack ($2 )));
2448
2453
2449
- if (parser_stack ($7 ).is_not_nil ())
2450
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($7 ));
2451
-
2452
2454
if (parser_stack ($8 ).is_not_nil ())
2453
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($8 ));
2455
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($8 ));
2456
+
2457
+ if (parser_stack ($9 ).is_not_nil ())
2458
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($9 ));
2454
2459
}
2455
2460
| TOK_FOR
2456
2461
{
@@ -2464,7 +2469,9 @@ iteration_statement:
2464
2469
' (' declaration_or_expression_statement
2465
2470
comma_expression_opt ' ;'
2466
2471
comma_expression_opt ' )'
2467
- loop_invariant_opt cprover_decreases_opt
2472
+ cprover_contract_assigns_opt
2473
+ cprover_contract_invariant_opt
2474
+ cprover_contract_decreases_opt
2468
2475
statement
2469
2476
{
2470
2477
$$=$1 ;
@@ -2473,13 +2480,13 @@ iteration_statement:
2473
2480
mto ($$, $4 );
2474
2481
mto ($$, $5 );
2475
2482
mto ($$, $7 );
2476
- mto ($$, $11 );
2477
-
2478
- if (parser_stack ($9 ).is_not_nil ())
2479
- parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($9 ));
2483
+ mto ($$, $12 );
2480
2484
2481
2485
if (parser_stack ($10 ).is_not_nil ())
2482
- parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($10 ));
2486
+ parser_stack ($$).add (ID_C_spec_loop_invariant).swap (parser_stack ($10 ));
2487
+
2488
+ if (parser_stack ($11 ).is_not_nil ())
2489
+ parser_stack ($$).add (ID_C_spec_decreases).swap (parser_stack ($11 ));
2483
2490
2484
2491
if (PARSER.for_has_scope )
2485
2492
PARSER.pop_scope (); // remove the C99 for-scope
@@ -3261,10 +3268,10 @@ cprover_function_contract:
3261
3268
set ($$, ID_C_spec_requires);
3262
3269
mto ($$, $3 );
3263
3270
}
3264
- | cprover_contract_assigns_opt
3271
+ | cprover_contract_assigns
3265
3272
;
3266
3273
3267
- cprover_contract_assigns_opt :
3274
+ cprover_contract_assigns :
3268
3275
TOK_CPROVER_ASSIGNS ' (' argument_expression_list ' )'
3269
3276
{
3270
3277
$$=$1 ;
@@ -3274,6 +3281,16 @@ cprover_contract_assigns_opt:
3274
3281
}
3275
3282
;
3276
3283
3284
+ cprover_contract_assigns_opt:
3285
+ /* nothing */
3286
+ { init ($$); parser_stack ($$).make_nil (); }
3287
+ | cprover_contract_assigns
3288
+ ;
3289
+
3290
+ <<<<<<< HEAD
3291
+ =======
3292
+
3293
+ >>>>>>> 36ca4e761... update
3277
3294
cprover_function_contract_sequence:
3278
3295
cprover_function_contract
3279
3296
| cprover_function_contract_sequence cprover_function_contract
@@ -3289,6 +3306,12 @@ cprover_function_contract_sequence_opt:
3289
3306
| cprover_function_contract_sequence
3290
3307
;
3291
3308
3309
+ cprover_loop_contract:
3310
+ cprover_contract_assigns_opt
3311
+ loop_invariant_opt
3312
+ | loop_invariant_opt
3313
+ ;
3314
+
3292
3315
postfixing_abstract_declarator:
3293
3316
parameter_postfixing_abstract_declarator
3294
3317
/* The following two rules implement K&R headers! */
0 commit comments