From 3c8dfce3c60953b5095f74d6d151f4a9266f9de4 Mon Sep 17 00:00:00 2001 From: Valentin Perrelle <valentin.perrelle@cea.fr> Date: Tue, 25 Jun 2019 19:30:43 +0200 Subject: [PATCH] [Aorai] Add a check to prevent the use of metavariables with non-deterministic automata --- src/plugins/aorai/data_for_aorai.ml | 19 +++++++++++++++++++ .../tests/ya/metavariables-incompatible.i | 6 ++++++ .../tests/ya/metavariables-incompatible.ya | 9 +++++++++ .../metavariables-incompatible.res.oracle | 4 ++++ 4 files changed, 38 insertions(+) create mode 100644 src/plugins/aorai/tests/ya/metavariables-incompatible.i create mode 100644 src/plugins/aorai/tests/ya/metavariables-incompatible.ya create mode 100644 src/plugins/aorai/tests/ya/oracle/metavariables-incompatible.res.oracle diff --git a/src/plugins/aorai/data_for_aorai.ml b/src/plugins/aorai/data_for_aorai.ml index 24e1876a48b..56f2d69b042 100644 --- a/src/plugins/aorai/data_for_aorai.ml +++ b/src/plugins/aorai/data_for_aorai.ml @@ -1536,9 +1536,28 @@ let type_cond_auto auto = { original_auto with states = List.rev states; trans = List.rev trans } +(* Check Metavariable compatibility *) +let checkMetavariableCompatibility auto = + let is_extended_trans trans = + match trans.cross with + | Otherwise -> false + | Seq [ elt ] -> + elt.nested <> [] || not (is_single elt) + | Seq _ -> true + in + let has_metavariables = not (Datatype.String.Map.is_empty auto.metavariables) + and deterministic = Aorai_option.Deterministic.get () + and uses_extended_guards = List.exists is_extended_trans auto.trans in + if has_metavariables && (not deterministic || uses_extended_guards) then + Aorai_option.abort + "The use of metavariables is incompatible with non-deterministic \ + automata, such as automa using extended transitions." + + (** Stores the buchi automaton and its variables and functions as it is returned by the parsing *) let setAutomata auto = + checkMetavariableCompatibility auto; let auto = type_cond_auto auto in automata:=Some auto; check_states "typed automata"; diff --git a/src/plugins/aorai/tests/ya/metavariables-incompatible.i b/src/plugins/aorai/tests/ya/metavariables-incompatible.i new file mode 100644 index 00000000000..e572c484699 --- /dev/null +++ b/src/plugins/aorai/tests/ya/metavariables-incompatible.i @@ -0,0 +1,6 @@ +/* run.config* + OPT: -aorai-automata @PTEST_DIR@/@PTEST_NAME@.ya -aorai-test 1 -load-module tests/aorai/Aorai_test.cmxs -aorai-test-number @PTEST_NUMBER@ @PROVE_OPTIONS@ +*/ + +void main(void) {} + diff --git a/src/plugins/aorai/tests/ya/metavariables-incompatible.ya b/src/plugins/aorai/tests/ya/metavariables-incompatible.ya new file mode 100644 index 00000000000..059f0d555ba --- /dev/null +++ b/src/plugins/aorai/tests/ya/metavariables-incompatible.ya @@ -0,0 +1,9 @@ +%init: a; +%accept: b; +%deterministic; + +$x : int; + +a : { CALL(main)* } -> b; + +b : -> b; diff --git a/src/plugins/aorai/tests/ya/oracle/metavariables-incompatible.res.oracle b/src/plugins/aorai/tests/ya/oracle/metavariables-incompatible.res.oracle new file mode 100644 index 00000000000..cba15445f48 --- /dev/null +++ b/src/plugins/aorai/tests/ya/oracle/metavariables-incompatible.res.oracle @@ -0,0 +1,4 @@ +[kernel] Parsing tests/aorai/metavariables-incompatible.i (no preprocessing) +[aorai] Welcome to the Aorai plugin +[aorai] User Error: The use of metavariables is incompatible with non-deterministic automata, such as automa using extended transitions. +[kernel] Plug-in aorai aborted: invalid user input. -- GitLab