diff options
author | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2022-09-27 12:31:07 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2022-10-29 10:03:30 +0200 |
commit | a1dabb4792446538cce24eb87bcd3ccb3c09f18b (patch) | |
tree | b74523469addfab9db6afc5ced3564ce267da4d7 /cparser/SwitchNorm.mli | |
parent | dfc6b66ec21e148d29b2a6e8b5d77873a0a47511 (diff) | |
download | compcert-a1dabb4792446538cce24eb87bcd3ccb3c09f18b.tar.gz compcert-a1dabb4792446538cce24eb87bcd3ccb3c09f18b.zip |
Handle unstructured 'switch' statements such as Duff's device
- New elaboration pass: SwitchNorm
- recognizes structured 'switch' statements and puts them in a
normalized form;
- if selected, transforms unstructured 'switch' statements into a
structured switch with goto actions + the original switch body
with appropriate labels and gotos.
- C2C treatment of 'switch' statements is simplified accordingly.
- New language support option `-funstructured-switch`.
- Some tests were added (test/regression/switch3.c).
Diffstat (limited to 'cparser/SwitchNorm.mli')
-rw-r--r-- | cparser/SwitchNorm.mli | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/cparser/SwitchNorm.mli b/cparser/SwitchNorm.mli new file mode 100644 index 00000000..88e50dcd --- /dev/null +++ b/cparser/SwitchNorm.mli @@ -0,0 +1,28 @@ +(* *********************************************************************) +(* *) +(* The Compcert verified compiler *) +(* *) +(* Xavier Leroy, Collège de France and Inria *) +(* *) +(* Copyright Institut National de Recherche en Informatique et en *) +(* Automatique. All rights reserved. This file is distributed *) +(* under the terms of the GNU Lesser General Public License as *) +(* published by the Free Software Foundation, either version 2.1 of *) +(* the License, or (at your option) any later version. *) +(* This file is also distributed under the terms of the *) +(* INRIA Non-Commercial License Agreement. *) +(* *) +(* *********************************************************************) + +(* Normalization of structured "switch" statements + and emulation of unstructured "switch" statements (e.g. Duff's device) *) + +(* Assumes: nothing + Produces: code with normalized "switch" statements *) + +(* A normalized switch has the following form: + Sswitch(e, Sblock [ Slabeled(lbl1, case1); ... + Slabeled(lblN,caseN) ]) +*) + +val program: bool -> C.program -> C.program |