PIPS
semantics.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/semantics/semantics-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef semantics_header_included
7 #define semantics_header_included
8 /* semantics-local.h */
9 /*
10 
11  $Id: semantics-local.h 23065 2016-03-02 09:05:50Z coelho $
12 
13  Copyright 1989-2016 MINES ParisTech
14 
15  This file is part of PIPS.
16 
17  PIPS is free software: you can redistribute it and/or modify it
18  under the terms of the GNU General Public License as published by
19  the Free Software Foundation, either version 3 of the License, or
20  any later version.
21 
22  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
23  WARRANTY; without even the implied warranty of MERCHANTABILITY or
24  FITNESS FOR A PARTICULAR PURPOSE.
25 
26  See the GNU General Public License for more details.
27 
28  You should have received a copy of the GNU General Public License
29  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
30 
31 */
32  /* include file for semantic analysis */
33 
34 #define SEMANTICS_OPTIONS "?Otcfieod-D:"
35 
36 #define SEQUENTIAL_TRANSFORMER_SUFFIX ".tran"
37 #define USER_TRANSFORMER_SUFFIX ".utran"
38 #define SEQUENTIAL_PRECONDITION_SUFFIX ".prec"
39 #define USER_PRECONDITION_SUFFIX ".uprec"
40 #define SEQUENTIAL_TOTAL_PRECONDITION_SUFFIX ".tprec"
41 #define USER_TOTAL_PRECONDITION_SUFFIX ".utprec"
42 
43 extern bool refine_transformers_p;
44 
45 typedef struct{
48 } path;
49 
50 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) // C99
51 #define semantics_user_warning(...) \
52  semantics_user_warning_func(CURRENT_FUNCTION, __VA_ARGS__)
53 #else
54 #define semantics_user_warning semantics_user_warning_func2
55 #endif
56 
57 /* cproto-generated files */
58 /* misc.c */
59 extern int call_site_count(entity /*m*/);
60 extern int caller_count(entity /*m*/);
61 extern int dynamic_call_count(entity /*m*/);
62 extern void semantics_user_warning_func(const char */*func_name*/, const char */*format*/, ...);
63 extern void semantics_user_warning_func2(const char */*format*/, ...);
64 /* ri_to_transformers.c */
65 extern transformer apply_array_effect_to_transformer(transformer /*tf*/, effect /*e*/, bool /*apply_p*/);
67 extern transformer filter_transformer(transformer /*t*/, list /*e*/);
71 extern list effects_to_arguments(list /*fx*/);
72 extern transformer intrinsic_to_transformer(entity /*e*/, list /*pc*/, transformer /*pre*/, list /*ef*/);
73 extern transformer call_to_transformer(call /*c*/, transformer /*pre*/, list /*ef*/);
75 extern transformer generic_transformer_intra_to_inter(transformer /*tf*/, list /*le*/, bool /*preserve_rv_p*/);
77 extern unsigned int number_of_usable_functional_parameters(list /*pl*/);
79 extern transformer array_elements_substitution_in_transformer(transformer /*tf*/, entity /*fpv*/, type /*fpt*/, expression /*e*/, transformer /*cpre*/, list /*el*/, bool /*backward_p*/);
83 extern transformer new_array_elements_substitution_in_transformer(transformer /*tf*/, entity /*fpv*/, type /*fpt*/, expression /*e*/, transformer /*cpre*/, list /*el*/, bool /*backward_p*/);
84 extern transformer generic_substitute_formal_array_elements_in_transformer(transformer /*tf*/, entity /*f*/, list /*pc*/, transformer /*pre*/, list /*ef*/, bool /*backward_p*/);
88 extern transformer c_user_call_to_transformer(entity /*f*/, list /*pc*/, transformer /*pre*/, list /*ef*/);
89 extern transformer fortran_user_call_to_transformer(entity /*f*/, list /*pc*/, list /*ef*/);
90 extern transformer user_call_to_transformer(entity /*f*/, list /*pc*/, transformer /*pre*/, list /*ef*/);
91 extern transformer c_return_to_transformer(entity /*e*/, list /*pc*/, list /*ef*/, transformer /*pre*/);
94 extern transformer integer_assign_to_transformer(expression /*lhs*/, expression /*rhs*/, transformer /*pre*/, list /*ef*/);
96 extern transformer any_scalar_assign_to_transformer(entity /*v*/, expression /*rhs*/, list /*ef*/, transformer /*pre*/);
97 extern transformer transformer_apply_field_assignments_or_equalities(transformer /*t*/, reference /*l*/, reference /*r*/, type /*st*/, bool /*assign_p*/);
103 extern transformer struct_reference_equality_to_transformer(reference /*r*/, type /*t*/, expression /*rhs*/, transformer /*pre*/, list /*ef*/);
104 extern transformer struct_variable_assignment_to_transformer(entity /*v*/, type /*t*/, expression /*rhs*/, transformer /*pre*/, list /*ef*/);
105 extern transformer struct_variable_equality_to_transformer(entity /*v*/, type /*t*/, expression /*rhs*/, transformer /*pre*/, list /*ef*/);
106 extern transformer any_assign_to_transformer(list /*args*/, list /*ef*/, transformer /*pre*/);
107 extern transformer any_update_to_transformer(entity /*op*/, list /*args*/, list /*ef*/, transformer /*pre*/);
108 extern transformer any_basic_update_to_transformer(entity /*op*/, list /*args*/, list /*ef*/, transformer /*pre*/);
111 extern transformer generic_complete_statement_transformer(transformer /*t*/, transformer /*pre*/, statement /*s*/, bool /*identity_p*/);
113 /* interprocedural.c */
115 extern void add_module_call_site_precondition(entity /*m*/, transformer /*p*/);
118 extern transformer add_formal_to_actual_bindings(call /*c*/, transformer /*pre*/, entity /*caller*/);
119 extern transformer new_add_formal_to_actual_bindings(call /*c*/, transformer /*pre*/, entity /*caller*/);
120 extern transformer precondition_intra_to_inter(entity /*callee*/, transformer /*pre*/, list /*le*/);
121 extern void translate_global_values(entity /*m*/, transformer /*tf*/);
122 extern void translate_global_value(entity /*m*/, transformer /*tf*/, entity /*v*/);
123 extern void expressions_to_summary_precondition(transformer /*pre*/, list /*le*/);
124 extern void expression_to_summary_precondition(transformer /*pre*/, expression /*e*/);
125 extern void call_to_summary_precondition(transformer /*pre*/, call /*c*/);
126 extern text call_site_to_module_precondition_text(entity /*caller*/, entity /*callee*/, statement /*s*/, call /*c*/);
127 extern void reset_call_site_number(void);
128 extern int get_call_site_number(void);
132 /* ri_to_preconditions.c */
133 extern list get_module_global_arguments(void);
134 extern void set_module_global_arguments(list /*args*/);
135 extern list effects_to_entity_list(list /*lef*/);
142 extern transformer propagate_preconditions_in_declarations(list /*dl*/, transformer /*pre*/, void (* /*process_initial_expression*/)(expression, transformer));
143 /* mappings.c */
145 extern void add_equivalenced_values(entity /*e*/, entity /*eq*/, bool /*readonly*/);
146 extern void add_intraprocedural_value_entities(entity /*e*/);
147 extern void add_or_kill_equivalenced_variables(entity /*e*/, bool /*readonly*/);
148 extern void add_implicit_interprocedural_write_effects(entity /*al*/, list /*el*/);
149 extern void module_to_value_mappings(entity /*m*/);
150 extern bool value_mappings_compatible_vector_p(Pvecteur /*iv*/);
151 extern list variables_to_values(list /*list_mod*/);
152 extern list variable_to_values(entity /*e*/);
153 extern list dynamic_variables_to_values(list /*list_mod*/);
154 extern list variables_to_old_values(list /*list_mod*/);
155 extern void variables_to_new_values(Pvecteur /*v*/);
156 extern void upwards_vect_rename(Pvecteur /*v*/, transformer /*post*/);
157 /* dbm_interface.c */
158 extern bool transformer_map_undefined_p(void);
161 extern void reset_transformer_map(void);
162 extern void free_transformer_map(void);
163 extern void make_transformer_map(void);
172 extern void reset_precondition_map(void);
173 extern void free_precondition_map(void);
174 extern void make_precondition_map(void);
184 extern void free_total_precondition_map(void);
185 extern void make_total_precondition_map(void);
192 extern void add_declaration_list_information(transformer /*pre*/, list /*dl*/, bool /*precondition_p*/);
193 extern bool transformers_intra_fast(char */*module_name*/);
194 extern bool transformers_intra_full(char */*module_name*/);
195 extern bool transformers_inter_fast(char */*module_name*/);
196 extern bool transformers_inter_full(char */*module_name*/);
197 extern bool transformers_inter_full_with_points_to(char */*module_name*/);
199 extern bool refine_transformers(char */*module_name*/);
200 extern bool refine_transformers_with_points_to(char */*module_name*/);
201 extern bool summary_transformer(char */*module_name*/);
202 extern bool preconditions_intra(char */*module_name*/);
203 extern bool preconditions_intra_fast(char */*module_name*/);
204 extern bool preconditions_inter_fast(char */*module_name*/);
205 extern bool preconditions_inter_full(char */*module_name*/);
206 extern bool preconditions_inter_full_with_points_to(char */*module_name*/);
207 extern bool total_preconditions_intra(char */*module_name*/);
208 extern bool total_preconditions_inter(char */*module_name*/);
209 extern bool old_summary_precondition(char */*module_name*/);
210 extern bool intraprocedural_summary_precondition(char */*module_name*/);
211 extern bool interprocedural_summary_precondition(char */*module_name*/);
212 extern bool use_points_to_p(void);
213 extern bool interprocedural_summary_precondition_with_points_to(char */*module_name*/);
214 extern bool summary_precondition(char */*module_name*/);
215 extern bool summary_total_postcondition(char */*module_name*/);
216 extern bool summary_total_precondition(char */*module_name*/);
217 extern void set_warning_counters(void);
218 extern bool test_warning_counters(void);
219 extern bool generic_module_name_to_transformers(const char */*module_name*/, bool /*in_context*/);
220 extern bool module_name_to_transformers_in_context(const char */*module_name*/);
221 extern bool module_name_to_transformers(const char */*module_name*/);
222 extern bool module_name_to_preconditions(const char */*module_name*/);
223 extern bool module_name_to_total_preconditions(const char */*module_name*/);
225 extern void update_summary_precondition(entity /*e*/, transformer /*t*/);
228 extern list load_summary_effects(entity /*e*/);
229 extern list load_body_effects(entity /*e*/);
231 extern void cumulated_effects_map_print(void);
232 /* prettyprint.c */
233 extern bool semantic_map_undefined_p(void);
236 extern void reset_semantic_map(void);
237 extern void free_semantic_map(void);
238 extern void make_semantic_map(void);
244 extern void set_prettyprint_transformer(void);
245 extern bool print_code_transformers(const char */*module_name*/);
246 extern bool print_code_as_a_graph_transformers(const string /*mod_name*/);
247 extern bool print_code_preconditions(const char */*module_name*/);
248 extern bool print_code_as_a_graph_preconditions(const string /*mod_name*/);
249 extern bool print_code_total_preconditions(const char */*module_name*/);
250 extern bool print_code_as_a_graph_total_preconditions(const string /*mod_name*/);
251 extern bool print_source_transformers(const char */*module_name*/);
252 extern bool print_source_preconditions(const char */*module_name*/);
253 extern bool print_source_total_preconditions(const char */*module_name*/);
254 extern text get_text_transformers(const string /*module_name*/);
255 extern text get_text_preconditions(const string /*module_name*/);
256 extern text get_text_total_preconditions(const string /*module_name*/);
257 extern text semantic_to_text(entity /*module*/, int /*margin*/, statement /*stmt*/);
258 extern text text_transformer(transformer /*tran*/);
259 extern text text_for_a_transformer(transformer /*tran*/, bool /*is_a_transformer*/);
260 extern text string_predicate_to_commentary(string /*str_pred*/, string /*comment_prefix*/);
261 extern text words_predicate_to_commentary(list /*w_pred*/, string /*comment_prefix*/);
262 extern sentence make_pred_commentary_sentence(string /*str_pred*/, string /*comment_prefix*/);
263 extern bool print_call_graph_with_transformers(const string /*module_name*/);
264 extern bool print_call_graph_with_preconditions(const string /*module_name*/);
265 extern bool print_call_graph_with_total_preconditions(const string /*module_name*/);
266 extern bool print_icfg_with_preconditions(const string /*module_name*/);
267 extern bool print_icfg_with_transformers(const string /*module_name*/);
268 extern bool print_icfg_with_loops_preconditions(const string /*module_name*/);
269 extern bool print_icfg_with_loops_transformers(const string /*module_name*/);
270 extern bool print_icfg_with_control_preconditions(const string /*module_name*/);
271 extern bool print_icfg_with_control_transformers(const string /*module_name*/);
272 extern bool print_icfg_with_total_preconditions(const string /*module_name*/);
273 extern bool print_icfg_with_loops_total_preconditions(const string /*module_name*/);
274 extern bool print_icfg_with_control_total_preconditions(const string /*module_name*/);
275 /* postcondition.c */
279 extern void reset_postcondition_map(void);
280 extern void free_postcondition_map(void);
281 extern void make_postcondition_map(void);
287 extern statement_mapping compute_postcondition(statement /*stat*/, statement_mapping /*post_map*/, statement_mapping /*pre_map*/);
288 /* utils.c */
289 extern bool statement_weakly_feasible_p(statement /*s*/);
290 extern bool statement_feasible_p(statement /*s*/);
291 extern bool statement_strongly_feasible_p(statement /*s*/);
292 extern bool empty_range_wrt_precondition_p(range /*r*/, transformer /*p*/);
293 extern bool non_empty_range_wrt_precondition_p(range /*r*/, transformer /*p*/);
294 extern bool check_range_wrt_precondition(range /*r*/, transformer /*p*/, bool /*check_empty*/);
297 extern bool check_condition_wrt_precondition(expression /*c*/, transformer /*pre*/, bool /*check_true*/);
298 extern void expression_and_precondition_to_integer_interval(expression /*e*/, transformer /*p*/, int */*plb*/, int */*pub*/);
299 extern void integer_expression_and_precondition_to_integer_interval(expression /*e*/, transformer /*p*/, int */*plb*/, int */*pub*/);
300 extern void integer_value_and_precondition_to_integer_interval(entity /*v*/, transformer /*p*/, int */*plb*/, int */*pub*/);
301 /* initial.c */
302 extern bool initial_precondition(string /*name*/);
303 extern bool program_precondition(const string /*name*/);
304 extern bool program_postcondition(const string /*name*/);
305 extern bool print_initial_precondition(const string /*name*/);
306 extern bool print_program_precondition(const string /*name*/);
307 /* unstructured.c */
308 extern void print_control_postcondition_map(control_mapping /*control_postcondition_map*/);
309 extern transformer load_cycle_fix_point(control /*c*/, hash_table /*fix_point_map*/);
310 extern void update_temporary_precondition(void */*k*/, transformer /*pre*/, hash_table /*precondition_map*/);
311 extern void update_statement_temporary_precondition(statement /*s*/, transformer /*pre*/, statement_mapping /*statement_temporary_precondition_map*/);
312 extern void print_statement_temporary_precondition(statement_mapping /*statement_temporary_precondition_map*/);
313 extern void update_cycle_temporary_precondition(control /*c*/, transformer /*pre*/, control_mapping /*cycle_temporary_precondition_map*/);
314 extern transformer load_cycle_temporary_precondition(control /*c*/, control_mapping /*cycle_temporary_precondition_map*/, hash_table /*ancestor_map*/, hash_table /*scc_map*/);
315 extern transformer load_statement_temporary_precondition(statement /*s*/, statement_mapping /*statement_temporary_precondition_map*/);
316 extern transformer dag_or_cycle_to_flow_sensitive_postconditions_or_transformers(list /*partition*/, unstructured /*ndu*/, hash_table /*ancestor_map*/, hash_table /*scc_map*/, control_mapping /*fix_point_map*/, transformer /*e_pre*/, transformer /*n_pre*/, hash_table /*control_postcondition_map*/, bool /*postcondition_p*/, bool /*is_dag*/);
317 extern transformer dag_to_flow_sensitive_postconditions_or_transformers(list /*partition*/, unstructured /*ndu*/, hash_table /*ancestor_map*/, hash_table /*scc_map*/, control_mapping /*fix_point_map*/, transformer /*e_pre*/, transformer /*n_pre*/, hash_table /*control_postcondition_map*/, bool /*postcondition_p*/);
318 extern transformer cycle_to_flow_sensitive_postconditions_or_transformers(list /*partition*/, unstructured /*ndu*/, hash_table /*ancestor_map*/, hash_table /*scc_map*/, control_mapping /*fix_point_map*/, transformer /*e_pre*/, transformer /*n_pre*/, hash_table /*control_postcondition_map*/, bool /*postcondition_p*/);
319 extern transformer unstructured_to_flow_sensitive_postconditions_or_transformers(transformer /*pre_u*/, transformer /*pre*/, unstructured /*u*/, bool /*postcondition_p*/);
325 /* expression.c */
326 extern transformer generic_reference_to_transformer(entity /*v*/, reference /*r*/, transformer /*pre*/, bool /*is_internal*/);
328 extern transformer any_assign_operation_to_transformer(entity /*tmp*/, list /*args*/, transformer /*pre*/, bool /*is_internal*/);
329 extern transformer safe_any_assign_operation_to_transformer(entity /*tmp*/, list /*args*/, transformer /*pre*/, bool /*is_internal*/);
330 extern transformer transformer_add_condition_information(transformer /*pre*/, expression /*c*/, transformer /*context*/, bool /*veracity*/);
331 extern transformer precondition_add_condition_information(transformer /*pre*/, expression /*c*/, transformer /*context*/, bool /*veracity*/);
332 extern transformer transformer_add_domain_condition(transformer /*tf*/, expression /*c*/, transformer /*context*/, bool /*veracity*/);
333 extern transformer transformer_add_range_condition(transformer /*tf*/, expression /*c*/, transformer /*context*/, bool /*veracity*/);
334 extern transformer simple_affine_to_transformer(entity /*e*/, Pvecteur /*a*/, bool /*is_internal*/);
335 extern transformer affine_to_transformer(entity /*e*/, Pvecteur /*a*/, bool /*assignment*/);
337 extern transformer modulo_by_a_constant_to_transformer(entity /*v1*/, transformer /*prec*/, entity /*v2*/, int /*k*/);
338 extern transformer assign_operation_to_transformer(entity /*val*/, expression /*lhs*/, expression /*rhs*/, transformer /*pre*/);
339 extern transformer points_to_unary_operation_to_transformer(entity /*e*/, entity /*op*/, expression /*e1*/, transformer /*pre*/, bool /*is_internal*/, bool /*is_pointer*/);
341 extern transformer integer_expression_to_transformer(entity /*v*/, expression /*expr*/, transformer /*pre*/, bool /*is_internal*/);
342 extern transformer safe_integer_expression_to_transformer(entity /*v*/, expression /*expr*/, transformer /*pre*/, bool /*is_internal*/);
344 extern transformer logical_intrinsic_to_transformer(entity /*v*/, call /*c*/, transformer /*pre*/, bool /*is_internal*/);
345 extern transformer logical_expression_to_transformer(entity /*v*/, expression /*rhs*/, transformer /*pre*/, bool /*is_internal*/);
347 extern transformer float_expression_to_transformer(entity /*v*/, expression /*rhs*/, transformer /*pre*/, bool /*is_internal*/);
348 extern transformer pointer_expression_to_transformer(entity /*v*/, expression /*expr*/, transformer /*pre*/, bool /*is_internal*/);
349 extern transformer transformer_add_any_relation_information(transformer /*pre*/, entity /*op*/, expression /*e1*/, expression /*e2*/, transformer /*context*/, bool /*veracity*/, bool /*upwards*/);
351 extern transformer any_expressions_side_effects_to_transformer(list /*el*/, transformer /*p*/, bool /*is_internal*/);
352 extern transformer safe_any_expression_side_effects_to_transformer(expression /*e*/, transformer /*p*/, bool /*is_internal*/);
353 extern transformer any_expression_to_transformer(entity /*v*/, expression /*expr*/, transformer /*pre*/, bool /*is_internal*/);
354 extern transformer safe_any_expression_to_transformer(entity /*v*/, expression /*expr*/, transformer /*pre*/, bool /*is_internal*/);
355 extern transformer expression_to_transformer(expression /*exp*/, transformer /*pre*/, list /*el*/);
357 extern transformer condition_to_transformer(expression /*cond*/, transformer /*pre*/, bool /*veracity*/);
358 extern transformer conditional_to_transformer(expression /*cond*/, expression /*te*/, expression /*fe*/, transformer /*pre*/, list /*ef*/);
359 extern transformer any_conditional_to_transformer(entity /*v*/, list /*args*/, transformer /*pre*/);
360 extern transformer logical_not_to_transformer(entity /*v*/, list /*args*/, transformer /*pre*/);
361 extern transformer bitwise_xor_to_transformer(entity /*v*/, list /*args*/, transformer /*pre*/);
362 extern transformer expressions_to_transformer(list /*expl*/, transformer /*pre*/);
363 extern transformer any_expressions_to_transformer(entity /*v*/, list /*expl*/, transformer /*pre*/);
364 extern bool precondition_minmax_of_value(entity /*val*/, transformer /*tr*/, intptr_t */*pmin*/, intptr_t */*pmax*/);
365 extern bool precondition_minmax_of_expression(expression /*exp*/, transformer /*tr*/, intptr_t */*pmin*/, intptr_t */*pmax*/);
366 extern void simplify_minmax_expression(expression /*e*/, transformer /*tr*/);
367 extern bool false_condition_wrt_precondition_p(expression /*c*/, transformer /*pre*/);
368 extern bool true_condition_wrt_precondition_p(expression /*c*/, transformer /*pre*/);
369 extern bool eval_condition_wrt_precondition_p(expression /*c*/, transformer /*pre*/, bool /*veracity*/);
370 extern transformer transformer_add_integer_relation_information(transformer /*pre*/, entity /*relop*/, expression /*e1*/, expression /*e2*/, bool /*veracity*/, bool /*upwards*/);
372 extern bool semantics_usable_points_to_reference_p(reference /*rlhs*/, expression /*lhs*/, int /*n*/);
374 /* loop.c */
375 extern transformer any_loop_to_k_transformer(transformer /*t_init*/, transformer /*t_enter*/, transformer /*t_next*/, statement /*body*/, list /*lel*/, transformer /*post_init*/, int /*k*/);
376 extern transformer any_loop_to_transformer(transformer /*t_init*/, transformer /*t_enter*/, transformer /*t_next*/, statement /*body*/, list /*lel*/, transformer /*post_init*/);
377 extern transformer forloop_to_transformer(forloop /*fl*/, transformer /*pre*/, list /*flel*/);
379 extern transformer new_whileloop_to_transformer(whileloop /*wl*/, transformer /*pre*/, list /*wlel*/);
380 extern transformer new_whileloop_to_k_transformer(whileloop /*wl*/, transformer /*pre*/, list /*wlel*/, int /*k*/);
381 extern transformer repeatloop_to_transformer(whileloop /*wl*/, transformer /*pre*/, list /*wlel*/);
382 extern transformer add_loop_skip_condition(transformer /*tf*/, loop /*l*/, transformer /*pre*/);
383 extern transformer add_index_range_conditions(transformer /*pre*/, entity /*i*/, range /*r*/, transformer /*tfb*/);
384 extern transformer add_loop_index_exit_value(transformer /*post*/, loop /*l*/, transformer /*pre*/);
385 extern bool simple_dead_loop_p(expression /*lower*/, expression /*upper*/);
391 extern transformer loop_to_transformer(loop /*l*/, transformer /*pre*/, list /*e*/);
392 extern list loop_to_transformer_list(loop /*l*/, transformer /*pre*/, list /*e*/);
396 extern transformer new_loop_to_transformer(loop /*l*/, transformer /*pre*/, list /*lel*/);
397 extern list complete_any_loop_transformer_list(transformer /*t_init*/, transformer /*t_skip*/, transformer /*t_body_star*/, transformer /*t_body*/, transformer /*t_inc*/, transformer /*t_exit*/);
398 extern transformer complete_any_loop_transformer(transformer /*t_init*/, transformer /*t_enter*/, transformer /*t_skip*/, transformer /*t_body_star*/, transformer /*t_body*/, transformer /*t_continue*/, transformer /*t_inc*/, transformer /*t_exit*/);
399 extern transformer complete_forloop_transformer(transformer /*t_body_star*/, transformer /*pre*/, forloop /*fl*/);
400 extern list complete_forloop_transformer_list(transformer /*t_body_star*/, transformer /*pre*/, forloop /*fl*/);
401 extern list new_complete_whileloop_transformer_list(transformer /*t_body_star*/, transformer /*pre*/, whileloop /*wl*/, bool /*entered_p*/);
402 extern transformer new_complete_whileloop_transformer(transformer /*t_body_star*/, transformer /*pre*/, whileloop /*wl*/, bool /*entered_p*/);
404 extern transformer complete_repeatloop_transformer(transformer /*t_body_star*/, transformer /*pre*/, whileloop /*wl*/);
405 extern transformer complete_loop_transformer(transformer /*ltf*/, transformer /*pre*/, loop /*l*/);
406 extern list complete_loop_transformer_list(transformer /*ltf*/, transformer /*pre*/, loop /*l*/);
411 extern transformer whileloop_to_transformer(whileloop /*l*/, transformer /*pre*/, list /*e*/);
412 extern transformer whileloop_to_k_transformer(whileloop /*l*/, transformer /*pre*/, list /*e*/, int /*k*/);
413 extern transformer any_loop_to_postcondition(statement /*body*/, transformer /*t_init*/, transformer /*t_enter*/, transformer /*t_skip*/, transformer /*t_body_star*/, transformer /*t_body*/, transformer /*t_next*/, transformer /*t_inc*/, transformer /*t_exit*/, transformer /*pre*/);
414 extern transformer forloop_to_postcondition(transformer /*pre*/, forloop /*fl*/, transformer /*t_body_star*/);
415 extern transformer repeatloop_to_postcondition(transformer /*pre*/, whileloop /*wl*/, transformer /*t_body_star*/);
416 extern transformer loop_to_postcondition(transformer /*pre*/, loop /*l*/, transformer /*tf*/);
417 extern transformer loop_to_total_precondition(transformer /*t_post*/, loop /*l*/, transformer /*tf*/, transformer /*context*/);
419 extern transformer whileloop_to_total_precondition(transformer /*t_post*/, whileloop /*l*/, transformer /*tf*/, transformer /*context*/);
420 /* ri_to_total_preconditions.c */
422 /* ri_to_transformer_lists.c */
424 extern list declarations_to_transformer_list(list /*dl*/, transformer /*pre*/);
425 extern list intrinsic_to_transformer_list(entity /*e*/, list /*pc*/, transformer /*pre*/, list /*ef*/);
428 extern list integer_assign_to_transformer_list(expression /*lhs*/, expression /*rhs*/, transformer /*pre*/, list /*ef*/);
429 extern list any_scalar_assign_to_transformer_list(entity /*v*/, expression /*rhs*/, list /*ef*/, transformer /*pre*/);
430 extern list any_assign_to_transformer_list(list /*args*/, list /*ef*/, transformer /*pre*/);
431 extern list any_update_to_transformer_list(entity /*op*/, list /*args*/, list /*ef*/, transformer /*pre*/);
432 extern list any_basic_update_to_transformer_list(entity /*op*/, list /*args*/, list /*ef*/, transformer /*pre*/);
434 /* path_transformer.c */
435 extern void path_initialize(statement /*s*/, statement /*sbegin*/, statement /*send*/, path */*pb*/, path */*pe*/);
436 extern transformer path_transformer_on(statement /*s*/, path /*pbegin*/, path /*pend*/, int /*m*/);
437 extern transformer compute_path_transformer(statement /*s*/, path /*pbegin*/, path /*pend*/);
438 extern bool path_transformer(const string /*module_name*/);
439 /* type.c */
442 /* points_to.c */
445 extern transformer substitute_scalar_stub_in_transformer(transformer /*tf*/, entity /*se*/, entity /*de*/, bool /*backward_p*/, list */*ppl*/);
446 extern transformer substitute_struct_stub_in_transformer(transformer /*t*/, reference /*l*/, type /*lt*/, reference /*r*/, type /*rt*/, bool /*backward_p*/, list */*ppl*/);
447 extern transformer substitute_stubs_in_transformer(transformer /*tf*/, call /*c*/, statement /*s*/, bool /*backward_p*/);
448 extern transformer new_substitute_stubs_in_transformer(transformer /*tf*/, call /*c*/, statement /*s*/, bool /*backward_p*/);
449 #endif /* semantics_header_included */
struct _newgen_struct_statement_ * statement
Definition: cloning.h:21
static list indices
Definition: icm.c:204
bool print_code_as_a_graph_preconditions(const string)
Definition: prettyprint.c:120
void integer_value_and_precondition_to_integer_interval(entity, transformer, int *, int *)
Should be used by previous function, integer_expression_and_precondition_to_integer_interval()
Definition: utils.c:427
list load_body_effects(entity)
void print_control_postcondition_map(control_mapping)
unstructured.c
Definition: unstructured.c:295
void free_postcondition_map(void)
bool print_source_transformers(const char *)
Definition: prettyprint.c:155
transformer call_to_transformer(call, transformer, list)
Use to be static, but may be called from expressions in C.
bool print_call_graph_with_transformers(const string)
Definition: prettyprint.c:702
transformer complete_non_identity_statement_transformer(transformer, transformer, statement)
FI: only implemented for while loops.
void update_statement_precondition(statement, transformer)
transformer any_update_to_transformer(entity, list, list, transformer)
precondition
transformer transformer_add_domain_condition(transformer, expression, transformer, bool)
Definition: expression.c:1138
transformer declarations_to_transformer(list, transformer)
For C declarations.
list variables_to_old_values(list)
Definition: mappings.c:1024
bool old_summary_precondition(char *)
transformer precondition_filter_old_values(transformer)
Definition: loop.c:1065
void reset_call_site_number(void)
transformer substitute_stubs_in_transformer(transformer, call, statement, bool)
Exploit the binding map to substitute calles's stubs by actual arguments, which may be stubs of the c...
Definition: points_to.c:256
transformer cycle_to_flow_sensitive_postconditions_or_transformers(list, unstructured, hash_table, hash_table, control_mapping, transformer, transformer, hash_table, bool)
Compute transformers or preconditions.
transformer load_cycle_temporary_precondition(control, control_mapping, hash_table, hash_table)
transformer load_completed_statement_transformer(statement)
three mappings used throughout semantics analysis:
transformer struct_variable_equality_to_transformer(entity, type, expression, transformer, list)
transformer integer_expression_to_transformer(entity, expression, transformer, bool)
Do check wrt to value mappings...
Definition: expression.c:3476
transformer unstructured_to_transformer(unstructured, transformer, list)
effects of u
transformer whileloop_to_k_transformer(whileloop, transformer, list, int)
Definition: loop.c:2617
void update_summary_precondition_in_declaration(expression, transformer)
This function is called to deal with call sites located in initialization expressions carried by decl...
void delete_statement_transformer(statement)
transformer transformer_apply_field_assignments_or_equalities(transformer, reference, reference, type, bool)
For all analyzable fields f, apply the assignment "le.f = re.f;" to transformer t.
transformer loop_to_initialization_transformer(loop, transformer)
Transformer expression the loop initialization.
Definition: loop.c:1430
unsigned int number_of_usable_functional_parameters(list)
Number of formal parameters in pl before a vararg is reached.
transformer transformer_add_loop_index_initialization(transformer, loop, transformer)
The loop initialization is performed before tf.
Definition: loop.c:1082
void transformer_add_type_information(transformer)
type.c
Definition: type.c:162
bool transformer_map_undefined_p(void)
dbm_interface.c
bool path_transformer(const string)
void integer_expression_and_precondition_to_integer_interval(expression, transformer, int *, int *)
Could be used for bool expressions too? Extended to any kind of expression?
Definition: utils.c:386
transformer loop_to_continue_transformer(loop, transformer)
Definition: loop.c:1501
transformer get_module_precondition(entity)
interprocedural.c
void make_total_precondition_map(void)
transformer any_conditional_to_transformer(entity, list, transformer)
Take care of the returned value.
Definition: expression.c:5524
transformer unstructured_to_flow_sensitive_total_preconditions(transformer, transformer, unstructured)
transformer any_expression_side_effects_to_transformer(expression, transformer, bool)
transformer unstructured_to_flow_sensitive_postconditions(transformer, transformer, unstructured)
compute pre- and post-conditions in an unstructured from the entry precondition pre and return the ex...
transformer transformer_intra_to_inter(transformer, list)
bool print_source_total_preconditions(const char *)
Definition: prettyprint.c:174
bool refine_transformers(char *)
transformer load_statement_temporary_precondition(statement, statement_mapping)
list semantics_expression_to_points_to_sinks(expression)
Returns a list of cells.
Definition: points_to.c:112
void make_postcondition_map(void)
void set_prettyprint_transformer(void)
Definition: prettyprint.c:77
void update_statement_semantic(statement, transformer)
transformer any_assign_to_transformer(list, list, transformer)
precondition
void delete_statement_semantic(statement)
void add_implicit_interprocedural_write_effects(entity, list)
It is assumed that al is an abstract location that is written and which may conflict with effects in ...
Definition: mappings.c:382
bool statement_semantic_undefined_p(statement)
transformer complete_whileloop_transformer(transformer, transformer, whileloop)
FI: I'm not sure this function is useful.
Definition: loop.c:2183
bool program_postcondition(const string)
The program correctness postcondition cannot be infered.
Definition: initial.c:233
list load_module_intraprocedural_effects(entity)
transformer safe_any_expression_to_transformer(entity, expression, transformer, bool)
Always return a usable transformer.
Definition: expression.c:5156
transformer substitute_formal_array_elements_in_precondition(transformer, entity, list, transformer, list)
transformer path_transformer_on(statement, path, path, int)
text get_text_preconditions(const string)
Definition: prettyprint.c:193
transformer any_scalar_assign_to_transformer(entity, expression, list, transformer)
precondition
transformer precondition_intra_to_inter(entity, transformer, list)
transformer expression_effects_to_transformer(expression)
Definition: expression.c:3465
list declaration_to_transformer_list(entity, transformer)
ri_to_transformer_lists.c
list safe_assigned_expression_to_transformer_list(entity, expression, transformer)
Always returns a fully defined transformer.
transformer integer_assign_to_transformer(expression, expression, transformer, list)
This function never returns an undefined transformer.
bool value_mappings_compatible_vector_p(Pvecteur)
transform a vector based on variable entities into a vector based on new value entities when possible...
Definition: mappings.c:924
bool transformers_intra_full(char *)
transformer any_user_call_site_to_transformer(entity, list, transformer, list)
bool print_icfg_with_loops_total_preconditions(const string)
bool statement_weakly_feasible_p(statement)
utils.c
Definition: utils.c:72
void set_module_global_arguments(list)
bool transformers_intra_fast(char *)
Functions to make transformers.
transformer load_statement_semantic(statement)
transformer load_cycle_fix_point(control, hash_table)
Definition: unstructured.c:544
bool statement_strongly_feasible_p(statement)
Return true if statement s is reachable according to its precondition.
Definition: utils.c:99
void add_declaration_list_information(transformer, list, bool)
transformer any_loop_to_transformer(transformer, transformer, transformer, statement, list, transformer)
bool preconditions_inter_fast(char *)
transformer c_user_call_to_transformer(entity, list, transformer, list)
list any_scalar_assign_to_transformer_list(entity, expression, list, transformer)
precondition
sentence make_pred_commentary_sentence(string, string)
sentence make_pred_commentary_sentence(string str_pred, string comment_prefix) input : a substring fo...
Definition: prettyprint.c:678
bool non_empty_range_wrt_precondition_p(range, transformer)
Definition: utils.c:121
transformer load_statement_precondition(statement)
bool transformers_inter_full(char *)
transformer simple_affine_to_transformer(entity, Pvecteur, bool)
INTEGER EXPRESSIONS.
Definition: expression.c:1167
void free_total_precondition_map(void)
text text_for_a_transformer(transformer, bool)
call this one from outside.
Definition: prettyprint.c:540
transformer generic_substitute_formal_array_elements_in_transformer(transformer, entity, list, transformer, list, bool)
transformer any_loop_to_postcondition(statement, transformer, transformer, transformer, transformer, transformer, transformer, transformer, transformer, transformer)
Definition: loop.c:2634
list load_summary_effects(entity)
FI->FI, FI->BC: these two functions should be moved into effects-util or effects-simple.
bool summary_total_postcondition(char *)
transformer add_index_range_conditions(transformer, entity, range, transformer)
Definition: loop.c:711
transformer substitute_scalar_stub_in_transformer(transformer, entity, entity, bool, list *)
If both "se", source entity, and "de", destination entity, are defined, substitute the values of "se"...
Definition: points_to.c:136
transformer loop_bound_evaluation_to_transformer(loop, transformer)
Side effects in loop bounds and increment are taken into account.
Definition: loop.c:1203
transformer forloop_to_postcondition(transformer, forloop, transformer)
Definition: loop.c:2707
transformer transformer_logical_inequalities_add(transformer, entity)
PROCESSING OF LOGICAL EXPRESSIONS.
Definition: expression.c:3569
list declarations_to_transformer_list(list, transformer)
For C declarations.
bool print_initial_precondition(const string)
Definition: initial.c:261
bool print_icfg_with_preconditions(const string)
transformer any_scalar_assign_to_transformer_without_effect(entity, expression, transformer)
assign to the scalar variable v the expression rhs (a scalar variable has a basic type; it cannot be ...
void translate_global_value(entity, transformer, entity)
Try to convert an value on a non-local variable into an value on a local variable using a guessed nam...
void set_total_precondition_map(statement_mapping)
transformer any_expressions_side_effects_to_transformer(list, transformer, bool)
same as any_expression_side_effects_to_transformer() but for a list of expressions
Definition: expression.c:4921
transformer tf_equivalence_equalities_add(transformer)
mappings.c
Definition: mappings.c:83
bool preconditions_inter_full_with_points_to(char *)
bool refine_transformers_p
Transformer recomputation cannot be of real use unless an interprocedural analysis is performed.
Definition: semantics.h:198
transformer generic_complete_statement_transformer(transformer, transformer, statement, bool)
Loops, do, for, while or repeat, have transformers linked to their body preconditions so as to comput...
list any_update_to_transformer_list(entity, list, list, transformer)
precondition
void transformer_add_reference_information(transformer, statement)
list variables_to_values(list)
Definition: mappings.c:966
transformer modulo_by_a_constant_to_transformer(entity, transformer, entity, int)
Analyze v2 % k, with v2 constrainted by tf, assuming tf is a precondition.
Definition: expression.c:1481
transformer declaration_to_transformer(entity, transformer)
Note: initializations of static variables are not used as transformers but to initialize the program ...
transformer intrinsic_to_transformer(entity, list, transformer, list)
effects of intrinsic call
void make_semantic_map(void)
void update_statement_postcondition(statement, transformer)
transformer user_function_call_to_transformer(entity, expression, transformer)
a function call is a call to a non void function in C and to a FUNCTION in Fortran
void store_statement_semantic(statement, transformer)
list complete_any_loop_transformer_list(transformer, transformer, transformer, transformer, transformer, transformer)
FI: used to be complete_any_loop_transformer() with a direct reduction by convex hull.
Definition: loop.c:1578
list complete_repeatloop_transformer_list(transformer, transformer, whileloop)
transformer new_substitute_stubs_in_transformer(transformer, call, statement, bool)
Definition: points_to.c:417
bool precondition_minmax_of_value(entity, transformer, intptr_t *, intptr_t *)
compute integer bounds pmax, pmin of value val under preconditions tr require value mappings set !
Definition: expression.c:5790
void add_module_call_site_precondition(entity, transformer)
transformer propagate_preconditions_in_declarations(list, transformer, void(*)(expression, transformer))
This function is mostly copied from declarations_to_transformer().
bool semantics_usable_points_to_reference_p(reference, expression, int)
See if references rlhs is usable and process null, undefined and anywhere locations defined by rlhs.
Definition: expression.c:6194
transformer transformer_apply_unknown_field_equalities(transformer, reference, type)
bool refine_transformers_with_points_to(char *)
bool false_condition_wrt_precondition_p(expression, transformer)
Definition: expression.c:5891
bool precondition_minmax_of_expression(expression, transformer, intptr_t *, intptr_t *)
compute integer bounds pmax, pmin of expression exp under preconditions tr require value mappings set...
Definition: expression.c:5818
bool print_icfg_with_total_preconditions(const string)
list effects_to_arguments(list)
list of effects
bool module_name_to_preconditions(const char *)
resource module_name_to_preconditions(char * module_name): compute a transformer for each statement o...
transformer transformer_apply_field_equalities(transformer, reference, reference, type)
int dynamic_call_count(entity)
Definition: misc.c:75
list any_basic_update_to_transformer_list(entity, list, list, transformer)
precondition
void reset_total_precondition_map(void)
transformer transformer_add_any_relation_information(transformer, entity, expression, expression, transformer, bool, bool)
compute transformer or precondition
Definition: expression.c:4686
void free_semantic_map(void)
transformer pointer_expression_to_transformer(entity, expression, transformer, bool)
Definition: expression.c:4582
bool true_condition_wrt_precondition_p(expression, transformer)
Definition: expression.c:5900
void translate_global_values(entity, transformer)
statement_mapping compute_postcondition(statement, statement_mapping, statement_mapping)
statement_mapping compute_postcondition(stat, post_map, pre_map) statement stat; statement_mapping po...
list any_assign_to_transformer_list(list, list, transformer)
precondition
bool precondition_map_undefined_p(void)
list new_complete_whileloop_transformer_list(transformer, transformer, whileloop, bool)
transformer complete_any_loop_transformer(transformer, transformer, transformer, transformer, transformer, transformer, transformer, transformer)
bool test_warning_counters(void)
void cumulated_effects_map_print(void)
ca n'a rien a` faire ici, et en plus, il serait plus inte'ressant d'avoir une fonction void statement...
bool print_code_transformers(const char *)
Definition: prettyprint.c:90
bool transformers_inter_fast(char *)
bool empty_range_wrt_precondition_p(range, transformer)
A range cannot be tested exactly wrt a precondition You can try to prove that it is empty or you can ...
Definition: utils.c:112
transformer statement_to_total_precondition(transformer, statement)
ri_to_total_preconditions.c
void add_or_kill_equivalenced_variables(entity, bool)
Look for variables equivalenced with e.
Definition: mappings.c:204
bool use_points_to_p(void)
transformer add_loop_index_exit_value(transformer, loop, transformer)
The exit value is known if.
Definition: loop.c:878
transformer safe_any_assign_operation_to_transformer(entity, list, transformer, bool)
Definition: expression.c:575
bool program_precondition(const string)
Compute the union of all initial preconditions.
Definition: initial.c:134
void update_temporary_precondition(void *, transformer, hash_table)
Definition: unstructured.c:975
bool total_precondition_map_undefined_p(void)
transformer new_add_formal_to_actual_bindings(call, transformer, entity)
Take side effects into account:
transformer new_array_elements_backward_substitution_in_transformer(transformer, entity, type, expression, transformer, list)
bool print_call_graph_with_preconditions(const string)
Definition: prettyprint.c:712
void expressions_to_summary_precondition(transformer, list)
bool postcondition_map_undefined_p(void)
postcondition.c
transformer expression_to_transformer(expression, transformer, list)
Just to capture side effects as the returned value is ignored.
Definition: expression.c:5190
void set_warning_counters(void)
transformer loop_initialization_to_transformer(loop, transformer)
Note: It used to be implemented by computing the effect list of the lower bound expression and and ne...
Definition: loop.c:1266
transformer repeatloop_to_transformer(whileloop, transformer, list)
effects of whileloop wl
Definition: loop.c:449
void call_to_summary_precondition(transformer, call)
transformer all_data_to_precondition(entity)
any variable is included.
bool print_call_graph_with_total_preconditions(const string)
Definition: prettyprint.c:722
list loop_to_transformer_list(loop, transformer, list)
void store_statement_transformer(statement, transformer)
list statement_to_transformer_list(statement, transformer)
A transformer is already available for statement s, but it is going to be refined into a list of tran...
transformer dag_or_cycle_to_flow_sensitive_postconditions_or_transformers(list, unstructured, hash_table, hash_table, control_mapping, transformer, transformer, hash_table, bool, bool)
Should ndu be a dag or a cycle?
transformer safe_expression_to_transformer(expression, transformer)
Definition: expression.c:5307
bool statement_total_precondition_undefined_p(statement)
void set_semantic_map(statement_mapping)
transformer load_statement_total_precondition(statement)
bool summary_transformer(char *)
transformer new_array_elements_substitution_in_transformer(transformer, entity, type, expression, transformer, list, bool)
int get_call_site_number(void)
transformer new_array_element_backward_substitution_in_transformer(transformer, entity, reference, reference)
Substitute formal location entity l by a location entity corresponding to ar, if it is possible.
transformer forloop_to_transformer(forloop, transformer, list)
effects of forloop fl
Definition: loop.c:326
void set_transformer_map(statement_mapping)
bool eval_condition_wrt_precondition_p(expression, transformer, bool)
Definition: expression.c:5909
bool print_icfg_with_control_preconditions(const string)
void update_statement_total_precondition(statement, transformer)
void free_precondition_map(void)
bool check_range_wrt_precondition(range, transformer, bool)
FI: this function is outdated because it does not compute the transformers for the range expressions,...
Definition: utils.c:135
list effects_to_entity_list(list)
returns an allocated list of entities that appear in lef.
transformer unstructured_to_postcondition(transformer, unstructured, transformer)
transformer load_statement_transformer(statement)
transformer struct_reference_equality_to_transformer(reference, type, expression, transformer, list)
bool preconditions_intra(char *)
transformer transformer_apply_unknown_field_assignments(transformer, reference, type)
void precondition_add_type_information(transformer)
void reset_precondition_map(void)
transformer complete_loop_transformer(transformer, transformer, loop)
The transformer computed and stored for a loop is useful to compute the loop body precondition,...
Definition: loop.c:1927
bool preconditions_inter_full(char *)
transformer affine_increment_to_transformer(entity, Pvecteur)
Definition: expression.c:1269
transformer new_array_elements_forward_substitution_in_transformer(transformer, entity, type, expression, transformer, list)
transformer old_complete_whileloop_transformer(transformer, transformer, whileloop)
Definition: loop.c:2213
transformer add_loop_skip_condition(transformer, loop, transformer)
tf and pre are a unique data structure when preconditions are computed
Definition: loop.c:495
void make_precondition_map(void)
bool print_program_precondition(const string)
Definition: initial.c:293
void expression_to_summary_precondition(transformer, expression)
transformer load_summary_transformer(entity)
list forloop_to_transformer_list(forloop, transformer, list)
bool preconditions_intra_fast(char *)
transformer safe_assigned_expression_to_transformer(entity, expression, transformer)
Always returns a fully defined transformer.
int simplify_boolean_expression_with_precondition(expression, transformer)
Simplification of bool expressions with precondition.
Definition: expression.c:6080
text get_text_total_preconditions(const string)
Definition: prettyprint.c:203
transformer user_call_to_transformer(entity, list, transformer, list)
transformer float_expression_to_transformer(entity, expression, transformer, bool)
Definition: expression.c:4153
transformer new_complete_whileloop_transformer(transformer, transformer, whileloop, bool)
entered_p is used to for the execution of at least one iteration
Definition: loop.c:1833
transformer substitute_formal_array_elements_in_transformer(transformer, entity, list, transformer, list)
bool print_code_total_preconditions(const char *)
Definition: prettyprint.c:131
void delete_statement_precondition(statement)
transformer condition_to_transformer(expression, transformer, bool)
To capture side effects and to add C twist for numerical conditions.
Definition: expression.c:5348
statement_mapping get_postcondition_map(void)
bool total_preconditions_inter(char *)
transformer logical_expression_to_transformer(entity, expression, transformer, bool)
Could be used to compute preconditions too.
Definition: expression.c:3938
transformer standard_whileloop_to_transformer(whileloop, transformer, list)
This function computes the effect of K loop iteration, with K positive.
Definition: loop.c:2456
transformer dimensions_to_transformer(entity, transformer)
Assumes that entity_has_values_p(v) holds.
transformer any_expression_to_transformer(entity, expression, transformer, bool)
A set of functions to compute the transformer associated to an expression evaluated in a given contex...
Definition: expression.c:4993
bool statement_transformer_undefined_p(statement)
bool print_icfg_with_control_transformers(const string)
transformer compute_path_transformer(statement, path, path)
transformer assigned_expression_to_transformer(entity, expression, transformer)
transformer assigned_expression_to_transformer(entity e, expression expr, list ef): returns a transfo...
transformer generic_transformer_intra_to_inter(transformer, list, bool)
transformer translation from the module intraprocedural transformer to the module interprocedural tra...
bool interprocedural_summary_precondition_with_points_to(char *)
transformer lhs_expression_to_transformer(entity, expression, transformer)
This function deals with e1.e2 and e1->e2, not with simple references such as x or a[i].
Definition: expression.c:6262
bool same_analyzable_type_scalar_entity_list_p(list)
void free_transformer_map(void)
list intrinsic_to_transformer_list(entity, list, transformer, list)
because of the conditional and the comma C intrinsics at least
list complete_whileloop_transformer_list(transformer, transformer, whileloop)
Definition: loop.c:2198
list get_module_global_arguments(void)
ri_to_preconditions.c
transformer whileloop_to_transformer(whileloop, transformer, list)
effects of whileloop l
Definition: loop.c:2583
transformer whileloop_to_postcondition(transformer, whileloop, transformer)
Definition: loop.c:3141
transformer logical_not_to_transformer(entity, list, transformer)
returns the transformer associated to a C logical not, !, applied to an integer argument,...
Definition: expression.c:5571
transformer loop_to_enter_transformer(loop, transformer)
Transformer expressiong the conditions between the index and the loop bounds according to the sign of...
Definition: loop.c:1442
transformer loop_to_transformer(loop, transformer, list)
The transformer associated to a DO loop does not include the exit condition because it is used to com...
Definition: loop.c:1319
transformer any_basic_update_to_transformer(entity, list, list, transformer)
precondition
transformer safe_integer_expression_to_transformer(entity, expression, transformer, bool)
Always return a defined transformer, using effects in case a more precise analysis fails.
Definition: expression.c:3552
transformer conditional_to_transformer(expression, expression, expression, transformer, list)
FI: not too smart to start with the special case with no value returned, just side-effects....
Definition: expression.c:5488
list integer_assign_to_transformer_list(expression, expression, transformer, list)
This function never returns an undefined transformer.
transformer value_passing_summary_transformer(entity, transformer)
With value passing, writes on formal parameters are not effective interprocedurally unless an array i...
void simplify_minmax_expression(expression, transformer)
tries hard to simplify expression e if it is a min or a max operator, by evaluating it under precondi...
Definition: expression.c:5849
text get_text_transformers(const string)
Definition: prettyprint.c:184
void set_postcondition_map(statement_mapping)
void set_precondition_map(statement_mapping)
void update_statement_transformer(statement, transformer)
void expression_and_precondition_to_integer_interval(expression, transformer, int *, int *)
Evaluate expression e in context p, assuming that e is an integer expression.
Definition: utils.c:325
void reset_semantic_map(void)
transformer safe_any_expression_side_effects_to_transformer(expression, transformer, bool)
Same as any_expression_side_effects_to_transformer() but effects are used to always generate a transf...
Definition: expression.c:4947
statement_mapping get_semantic_map(void)
transformer expressions_to_transformer(list, transformer)
Compute the transformer associated to a list of expressions such as "i=0, j = 1;".
Definition: expression.c:5722
bool print_source_preconditions(const char *)
Definition: prettyprint.c:164
transformer any_expressions_to_transformer(entity, list, transformer)
Compute the transformer associated to a list of expressions such as "i=0, j = 1;".
Definition: expression.c:5754
list dynamic_variables_to_values(list)
Build the list of values to be projected when the declaration list list_mod is no longer valid becaus...
Definition: mappings.c:1007
void module_to_value_mappings(entity)
void module_to_value_mappings(entity m): build hash tables between variables and values (old,...
Definition: mappings.c:624
transformer load_summary_precondition(entity)
summary_preconditions are expressed in any possible frame, in fact the frame of the last procedure th...
void store_statement_precondition(statement, transformer)
void precondition_add_reference_information(transformer, statement)
void upwards_vect_rename(Pvecteur, transformer)
Renaming of variables in v according to transformations occuring later.
Definition: mappings.c:1062
bool generic_module_name_to_transformers(const char *, bool)
bool generic_module_name_to_transformers(char * module_name, bool in_context): compute a transformer ...
transformer load_summary_total_postcondition(entity)
summary_preconditions are expressed in any possible frame, in fact the frame of the last procedure th...
transformer effects_to_transformer(list)
list of effects
transformer new_whileloop_to_transformer(whileloop, transformer, list)
effects of whileloop wl
Definition: loop.c:380
void store_statement_postcondition(statement, transformer)
bool print_code_preconditions(const char *)
Definition: prettyprint.c:110
bool print_icfg_with_loops_transformers(const string)
transformer c_return_to_transformer(entity, list, list, transformer)
transformer complete_repeatloop_transformer(transformer, transformer, whileloop)
Definition: loop.c:1910
transformer statement_to_postcondition(transformer, statement)
end of the non recursive section
text words_predicate_to_commentary(list, string)
text words_predicate_to_commentary(list w_pred, string comment_prefix) input : a list of strings,...
Definition: prettyprint.c:653
void print_statement_temporary_precondition(statement_mapping)
transformer add_formal_to_actual_bindings(call, transformer, entity)
add_formal_to_actual_bindings(call c, transformer pre, entity caller):
transformer assign_operation_to_transformer(entity, expression, expression, transformer)
Returns an undefined transformer in case of failure.
Definition: expression.c:2737
void make_transformer_map(void)
bool total_preconditions_intra(char *)
transformer filter_transformer(transformer, list)
Previous version of effects_to_transformer() transformer effects_to_transformer(list e) { list args =...
bool module_name_to_transformers_in_context(const char *)
bool intraprocedural_summary_precondition(char *)
transformer repeatloop_to_postcondition(transformer, whileloop, transformer)
Definition: loop.c:2760
statement_mapping get_total_precondition_map(void)
transformer unstructured_to_flow_sensitive_postconditions_or_transformers(transformer, transformer, unstructured, bool)
compute either the postconditions in an unstructured or the transformer of this unstructured.
bool interprocedural_summary_precondition(char *)
transformer transformer_apply_field_assignments(transformer, reference, reference, type)
bool module_name_to_total_preconditions(const char *)
void update_summary_precondition(entity, transformer)
void update_summary_precondition(e, t): t is supposed to be a precondition related to one of e's call...
void delete_statement_postcondition(statement)
transformer complete_forloop_transformer(transformer, transformer, forloop)
Definition: loop.c:1686
transformer any_assign_operation_to_transformer(entity, list, transformer, bool)
text text_transformer(transformer)
text text_transformer(transformer tran) input : a transformer representing a transformer or a precond...
Definition: prettyprint.c:464
bool module_name_to_transformers(const char *)
bool print_icfg_with_loops_preconditions(const string)
bool print_code_as_a_graph_total_preconditions(const string)
Definition: prettyprint.c:144
transformer transformer_add_integer_relation_information(transformer, entity, expression, expression, bool, bool)
It is supposed to be obsolete but is still called.
Definition: expression.c:5929
transformer dag_to_flow_sensitive_postconditions_or_transformers(list, unstructured, hash_table, hash_table, control_mapping, transformer, transformer, hash_table, bool)
Compute transformers or preconditions.
transformer transformer_add_condition_information(transformer, expression, transformer, bool)
Definition: expression.c:1092
bool summary_precondition(char *)
transformer array_elements_substitution_in_transformer(transformer, entity, type, expression, transformer, list, bool)
transformer transformer_add_loop_index_incrementation(transformer, loop, transformer)
Definition: loop.c:1136
void add_intraprocedural_value_entities(entity)
Use to be static, but may be called from ri_to_transformer.
Definition: mappings.c:181
void reset_postcondition_map(void)
transformer points_to_unary_operation_to_transformer(entity, entity, expression, transformer, bool, bool)
This function is redundant with generic_unary_operation_to_transformer() except for its use of parame...
Definition: expression.c:2770
text call_site_to_module_precondition_text(entity, entity, statement, call)
This function does everything needed.
bool statement_postcondition_undefined_p(statement)
transformer statement_to_transformer(statement, transformer)
stmt precondition
transformer affine_to_transformer(entity, Pvecteur, bool)
Definition: expression.c:1212
bool check_condition_wrt_precondition(expression, transformer, bool)
Definition: utils.c:294
transformer apply_array_effect_to_transformer(transformer, effect, bool)
ri_to_transformers.c
transformer substitute_struct_stub_in_transformer(transformer, reference, type, reference, type, bool, list *)
transformer transformer_formal_parameter_projection(entity, transformer)
transformer whileloop_to_total_precondition(transformer, whileloop, transformer, transformer)
Definition: loop.c:3439
bool statement_precondition_undefined_p(statement)
transformer any_loop_to_k_transformer(transformer, transformer, transformer, statement, list, transformer, int)
loop.c
transformer struct_variable_assignment_to_transformer(entity, type, expression, transformer, list)
list module_to_formal_analyzable_parameters(entity)
returns a module's parameter's list
transformer data_to_precondition(entity)
restricted to variables with effects.
list semantics_expression_to_points_to_sources(expression)
points_to.c
Definition: points_to.c:94
transformer new_whileloop_to_k_transformer(whileloop, transformer, list, int)
Definition: loop.c:416
list complete_forloop_transformer_list(transformer, transformer, forloop)
Definition: loop.c:1732
void transformer_add_variable_type_information(transformer, entity)
Definition: type.c:168
text semantic_to_text(entity, int, statement)
this function name is VERY misleading - it should be changed, sometime FI
Definition: prettyprint.c:354
void semantics_user_warning_func(const char *, const char *,...)
Definition: misc.c:118
void path_initialize(statement, statement, statement, path *, path *)
path_transformer.c
void variables_to_new_values(Pvecteur)
replace variables by new values which is necessary for equivalenced variables
Definition: mappings.c:1038
void update_statement_temporary_precondition(statement, transformer, statement_mapping)
Definition: unstructured.c:997
transformer transformer_add_range_condition(transformer, expression, transformer, bool)
Definition: expression.c:1147
transformer string_expression_to_transformer(entity, expression)
Definition: expression.c:3994
bool condition_true_wrt_precondition_p(expression, transformer)
A condition cannot be tested exactly wrt a precondition You can try to prove that it is always true (...
Definition: utils.c:276
void update_cycle_temporary_precondition(control, transformer, control_mapping)
transformer unstructured_to_flow_insensitive_transformer(unstructured)
This simple fix-point over-approximates the CFG by a fully connected graph.
bool summary_total_precondition(char *)
transformer new_loop_to_transformer(loop, transformer, list)
loop_to_transformer() was developed first but is not as powerful as the new algorithm used for all ki...
Definition: loop.c:1516
bool transformers_inter_full_with_points_to(char *)
transformer logical_intrinsic_to_transformer(entity, call, transformer, bool)
Definition: expression.c:3911
list variable_to_values(entity)
Definition: mappings.c:982
transformer bitwise_xor_to_transformer(entity, list, transformer)
returns the transformer associated to a C bitwise xor, ^, applied to two integer argument,...
Definition: expression.c:5619
transformer complete_statement_transformer(transformer, transformer, statement)
Returns the effective transformer ct for a given statement s.
bool print_code_as_a_graph_transformers(const string)
Definition: prettyprint.c:99
int call_site_count(entity)
cproto-generated files
Definition: misc.c:51
statement_mapping get_transformer_map(void)
void delete_statement_total_precondition(statement)
bool simple_dead_loop_p(expression, expression)
Definition: loop.c:1028
void reset_transformer_map(void)
list complete_loop_transformer_list(transformer, transformer, loop)
Definition: loop.c:2061
bool print_icfg_with_transformers(const string)
statement_mapping get_precondition_map(void)
transformer precondition_add_condition_information(transformer, expression, transformer, bool)
context might be derivable from pre as transformer_range(pre) but this is sometimes very computationa...
Definition: expression.c:1111
transformer fortran_user_call_to_transformer(entity, list, list)
Effects are necessary to clean up the transformer t_caller.
bool statement_feasible_p(statement)
Return true if statement s is reachable according to its precondition.
Definition: utils.c:92
transformer load_statement_postcondition(statement)
bool semantic_map_undefined_p(void)
prettyprint.c
bool condition_false_wrt_precondition_p(expression, transformer)
Definition: utils.c:285
void semantics_user_warning_func2(const char *,...)
Definition: misc.c:129
bool initial_precondition(string)
initial.c
Definition: initial.c:75
void add_equivalenced_values(entity, entity, bool)
Definition: mappings.c:107
transformer generic_reference_to_transformer(entity, reference, transformer, bool)
expression.c
Definition: expression.c:126
void store_statement_total_precondition(statement, transformer)
text string_predicate_to_commentary(string, string)
text string_predicate_to_commentary(string str_pred, string comment_prefix) input : a string,...
Definition: prettyprint.c:570
transformer any_basic_update_operation_to_transformer(entity, entity, entity)
See also any_basic_update_to_transformer(), which should be based on this function.
Definition: expression.c:317
bool print_icfg_with_control_total_preconditions(const string)
transformer struct_reference_assignment_to_transformer(reference, type, expression, transformer, list)
transformer update_precondition_with_call_site_preconditions(transformer, entity, entity)
Update precondition t for callee with preconditions of call sites to callee in caller.
list assigned_expression_to_transformer_list(entity, expression, transformer)
transformer assigned_expression_to_transformer(entity e, expression expr, list ef): returns a transfo...
transformer loop_to_total_precondition(transformer, loop, transformer, transformer)
Definition: loop.c:3023
int caller_count(entity)
Definition: misc.c:63
transformer loop_to_postcondition(transformer, loop, transformer)
Definition: loop.c:2841
#define intptr_t
Definition: stdint.in.h:294
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
The structure used to build lists in NewGen.
Definition: newgen_list.h:41