From a1dabb4792446538cce24eb87bcd3ccb3c09f18b Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 27 Sep 2022 12:31:07 +0200 Subject: 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). --- driver/Frontend.ml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'driver/Frontend.ml') diff --git a/driver/Frontend.ml b/driver/Frontend.ml index 5132f730..c8131662 100644 --- a/driver/Frontend.ml +++ b/driver/Frontend.ml @@ -80,11 +80,13 @@ let parse_c_file sourcename ifile = Sections.initialize(); CPragmas.reset(); (* Parsing and production of a simplified C AST *) - let ast = Parse.preprocessed_file - ~unblock: true - ~struct_passing: !option_fstruct_passing - ~packed_structs: !option_fpacked_structs - sourcename ifile in + let ast = + Parse.preprocessed_file + ~unblock: true + ~switch_norm: (if !option_funstructured_switch then `Full else `Partial) + ~struct_passing: !option_fstruct_passing + ~packed_structs: !option_fpacked_structs + sourcename ifile in (* Save C AST if requested *) Cprint.print_if ast; (* Conversion to Csyntax *) -- cgit