PIPS
effects-util.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/effects-util/effects-util-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef effects_util_header_included
7 #define effects_util_header_included
8 /* effects_util-local.h */
9 /*
10 
11  $Id: effects-util-local.h 23412 2017-08-09 15:07:09Z irigoin $
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 
33 #include "linear.h"
34 #include "newgen.h"
35 #include "ri.h"
36 #include "effects.h"
37 #include "points_to_private.h"
38 
39 #define ANY_MODULE_NAME "*ANY_MODULE*"
40 #define ANYWHERE_LOCATION "*ANYWHERE*"
41 #define NOWHERE_LOCATION "*NOWHERE*"
42 // Target of the null pointers:
43 #define NULL_POINTER_NAME "*NULL*"
44 #define UNDEFINED_LOCATION "*UNDEFINED*"
45 
46 #define UNDEFINED_POINTER_VALUE_NAME "*UNDEFINED*"
47 #define NULL_POINTER_VALUE_NAME "*NULL*"
48 
49 #define PHI_PREFIX "PHI"
50 #define PSI_PREFIX "PSI"
51 #define RHO_PREFIX "RHO"
52 #define BETA_PREFIX "BETA"
53 #define PROPER true
54 #define SUMMARY false
55 
56 /* some useful SHORTHANDS for EFFECT:
57  */
58 /* FI: Let's hope this one is not used as lhs! */
59 #define effect_any_entity(e) effect_to_entity(e)
60 #define effect_action_tag(eff) action_tag(effect_action(eff))
61 #define effect_approximation_tag(eff) \
62  approximation_tag(effect_approximation(eff))
63 
64 /* #define effect_scalar_p(eff) entity_scalar_p(effect_entity(eff))
65  *
66  * The semantics of effects_scalar_p() must be refined. If all the
67  * indices are constant expressions, we still have a scalar effect,
68  * unless they are later replaced by "*", as is the case currently for
69  * summary effects.
70  *
71  * Potential bug: eff is evaluated twice. Should be copied in a local
72  * variable and braces be used.
73  */
74 /*
75 //#define effect_scalar_p(eff) (((type_depth(entity_type(effect_entity(eff)))==0) \
76 // || ((type_depth(entity_type(effect_entity(eff)))==1) \
77 // && pointer_type_p(entity_type(effect_entity(eff))))) \
78 // && ENDP(reference_indices(effect_any_reference(eff))))
79 */
80 #define effect_read_p(eff) (action_tag(effect_action(eff))==is_action_read)
81 #define effect_write_p(eff) (action_tag(effect_action(eff))==is_action_write)
82 #define effect_may_p(eff) \
83  (approximation_tag(effect_approximation(eff)) == is_approximation_may)
84 #define effect_must_p(eff) \
85  (approximation_tag(effect_approximation(eff)) == is_approximation_must)
86 #define effect_exact_p(eff) \
87  (approximation_tag(effect_approximation(eff)) ==is_approximation_exact)
88 
89 
90 
91 
92 /* For COMPATIBILITY purpose only - DO NOT USE anymore
93  */
94 #define effect_variable(e) reference_variable(effect_any_reference(e))
95 
96 
97 
98 /* true if e is a phi variable
99  * PHI entities have a name like: REGIONS:PHI#, where # is a number.
100  * takes care if TCST and undefined entities, just in case.
101  * FC, 09/12/94
102  */
103 #define variable_phi_p(e) \
104  ((e)!=(entity)NULL && (e)!=entity_undefined && \
105  strncmp(entity_name(e), REGIONS_MODULE_NAME, 10)==0 && \
106  strstr(entity_name(e), PHI_PREFIX) != NULL)
107 
108 #define variable_psi_p(e) \
109  ((e)!=(entity)NULL && (e)!=entity_undefined && \
110  strncmp(entity_name(e), REGIONS_MODULE_NAME, 10)==0 && \
111  strstr(entity_name(e), PSI_PREFIX) != NULL)
112 
113 #define variable_rho_p(e) \
114  ((e)!=(entity)NULL && (e)!=entity_undefined && \
115  strncmp(entity_name(e), REGIONS_MODULE_NAME, 10)==0 && \
116  strstr(entity_name(e), RHO_PREFIX) != NULL)
117 
118 #define variable_beta_p(e)\
119  ((e)!=(entity)NULL && (e)!=entity_undefined && \
120  strncmp(entity_name(e), REGIONS_MODULE_NAME, 10)==0 && \
121  strstr(entity_name(e), BETA_PREFIX) != NULL)
122 
123 #define effect_system(e) \
124  (descriptor_convex_p(effect_descriptor(e))? \
125  descriptor_convex(effect_descriptor(e)) : SC_UNDEFINED)
126 
127 /* FI: it would be useful to assert cell_preference_p(effect_cell(e)),
128  but I do not know how to do it in such a way that it works both for
129  left hand sides and right hand sides using commas.
130  I definitely remove this one : it is too dangerous.
131 */
132 /* #define effect_reference(e) \
133  preference_reference(cell_preference(effect_cell(e))) */
134 #define effect_reference(e) \
135  /* DO NOT REMOVE, PREVENT REDEFINITION :)
136  * use effect_any_reference instead !
137  */ \
138  effect_reference_not_defined_anymore()
139 
140 /* FI: cannot be used as a left hand side */
141 #define effect_any_reference(e) \
142  (cell_preference_p(effect_cell(e))? preference_reference(cell_preference(effect_cell(e))) : cell_reference(effect_cell(e)))
143 #define make_preference_simple_effect(reference,action,approximation)\
144  make_effect(make_cell(is_cell_preference, make_preference(reference)),\
145  (action), (approximation), \
146  make_descriptor(is_descriptor_none,UU))
147 
148 #define make_reference_simple_effect(reference,action,approximation)\
149  make_effect(make_cell(is_cell_reference, (reference)), \
150  (action), (approximation), \
151  make_descriptor(is_descriptor_none,UU))
152 
153 #define make_simple_effect(reference,action,approximation)\
154  make_effect(make_cell(is_cell_preference, make_preference(reference)),\
155  (action), (approximation), \
156  make_descriptor(is_descriptor_none,UU))
157 
158 #define make_convex_effect(reference,action,approximation,system)\
159  make_effect(make_cell(is_reference, (reference)), \
160  (action), (approximation), \
161  make_descriptor(is_descriptor_convex,system))
162 
163 
164 /********* CELL_RELATION SHORTHANDS */
165 
166 #define cell_relation_first_cell(cr)\
167  interpreted_cell_cell(cell_relation_first(cr))
168 
169 #define cell_relation_first_interpretation_tag(cr)\
170  cell_interpretation_tag(interpreted_cell_cell_interpretation(cell_relation_first(cr)))
171 
172 #define cell_relation_first_value_of_p(cr)\
173  cell_interpretation_value_of_p(interpreted_cell_cell_interpretation(cell_relation_first(cr)))
174 
175 #define cell_relation_first_address_of_p(cr)\
176  cell_interpretation_address_of_p(interpreted_cell_cell_interpretation(cell_relation_first(cr)))
177 
178 #define cell_relation_second_cell(cr)\
179  interpreted_cell_cell(cell_relation_second(cr))
180 
181 #define cell_relation_second_interpretation_tag(cr)\
182  cell_interpretation_tag(interpreted_cell_cell_interpretation(cell_relation_second(cr)))
183 
184 #define cell_relation_second_value_of_p(cr)\
185  cell_interpretation_value_of_p(interpreted_cell_cell_interpretation(cell_relation_second(cr)))
186 
187 #define cell_relation_second_address_of_p(cr)\
188  cell_interpretation_address_of_p(interpreted_cell_cell_interpretation(cell_relation_second(cr)))
189 
190 #define cell_relation_approximation_tag(cr)\
191  approximation_tag(cell_relation_approximation(cr))
192 
193 #define cell_relation_may_p(cr)\
194  approximation_tag(cell_relation_approximation(cr))==is_approximation_may
195 
196 #define cell_relation_exact_p(cr)\
197  approximation_tag(cell_relation_approximation(cr))==is_approximation_exact
198 
199 #define pips_debug_pv(level, message, pv) \
200  ifdebug(level) { pips_debug(level, "%s\n", message); \
201  print_pointer_value(pv);}
202 
203 #define pips_debug_pvs(level, message, l_pv) \
204  ifdebug(level) { pips_debug(level, "%s\n", message); \
205  print_pointer_values(l_pv);}
206 
207 /********* CONTEXT AND FLOW SENSITIVITY INFORMATION */
208 typedef struct
209 {
212  list enclosing_flow; /* not used yet, we don't know if it should retain enclosing loops and/or modules */
214 /* cproto-generated files */
215 /* effects.c */
216 extern entity effect_entity(effect /*e*/);
217 extern entity cell_entity(cell /*c*/);
218 extern list cell_indices(cell /*c*/);
219 extern reference cell_any_reference(cell /*c*/);
220 extern bool memory_dereferencing_p(reference /*r*/);
221 extern effects list_to_effects(list /*l_eff*/);
222 extern list effects_to_list(effects /*efs*/);
225 extern bool statement_has_a_module_formal_argument_write_effect_p(statement /*s*/, entity /*module*/, statement_mapping /*effects_list_map*/);
226 extern bool cell_abstract_location_p(cell /*c*/);
227 extern bool effect_abstract_location_p(effect /*eff*/);
228 extern bool effects_abstract_location_p(list /*el*/);
229 extern effect anywhere_effect(action /*ac*/);
230 extern bool anywhere_effect_p(effect /*e*/);
231 extern bool typed_anywhere_effect_p(effect /*e*/);
232 extern bool any_anywhere_effect_p(effect /*e*/);
233 extern bool anywhere_cell_p(cell /*c*/);
234 extern bool anywhere_reference_p(reference /*r*/);
235 extern effect heap_effect(entity /*m*/, action /*ac*/);
236 extern bool heap_effect_p(effect /*e*/);
237 extern bool heap_cell_p(cell /*c*/);
238 extern bool all_heap_locations_cell_p(cell /*c*/);
239 extern bool nowhere_cell_p(cell /*c*/);
240 extern bool null_cell_p(cell /*c*/);
241 extern bool malloc_effect_p(effect /*e*/);
242 extern bool malloc_cell_p(cell /*c*/);
243 extern bool malloc_reference_p(reference /*r*/);
244 extern bool io_effect_entity_p(entity /*e*/);
245 extern bool io_effect_p(effect /*e*/);
246 extern bool io_cell_p(cell /*c*/);
247 extern bool io_effects_p(list effects);
248 extern bool std_file_effect_p(effect /*e*/);
249 extern bool std_file_cell_p(cell /*c*/);
250 extern bool std_file_effects_p(list effects);
251 extern bool FILE_star_effect_reference_p(reference /*ref*/);
252 extern bool effect_scalar_p(effect /*eff*/);
253 extern bool effect_comparable_p(effect /*e1*/, effect /*e2*/);
254 extern bool store_independent_effect_p(effect /*eff*/);
255 extern bool effect_on_non_local_variable_p(effect /*eff*/);
257 extern bool effects_interfere_p(effect /*eff1*/, effect /*eff2*/);
261 extern effect effect_interference(effect /*eff1*/, effect /*eff2*/);
262 extern string action_to_string(action /*ac*/);
263 extern string full_action_to_string(action /*ac*/);
264 extern string full_action_to_short_string(action /*ac*/);
265 extern string action_kind_to_string(action_kind /*ak*/);
266 extern action make_action_write_memory(void);
267 extern action make_action_read_memory(void);
268 extern bool action_equal_p(action /*a1*/, action /*a2*/);
270 extern action_kind effect_action_kind(effect /*eff*/);
271 extern bool store_effect_p(effect /*e*/);
272 extern bool environment_effect_p(effect /*e*/);
273 extern bool type_declaration_effect_p(effect /*e*/);
274 extern bool effects_write_variable_p(list /*el*/, entity /*v*/);
275 extern bool effects_write_p(list /*el*/);
276 extern bool effects_read_variable_p(list /*el*/, entity /*v*/);
277 extern bool effects_all_read_p(list /*el*/);
278 extern bool effect_list_can_be_safely_full_freed_p(list /*el*/);
279 extern tag approximation_and(tag /*t1*/, tag /*t2*/);
280 extern tag approximation_or(tag /*t1*/, tag /*t2*/);
281 extern bool cell_equal_p(cell /*c1*/, cell /*c2*/);
282 extern bool cell_entity_equal_p(cell /*c1*/, cell /*c2*/);
283 extern bool points_to_reference_included_p(reference /*r1*/, reference /*r2*/);
284 extern bool cell_included_p(cell /*c1*/, cell /*c2*/);
285 extern bool cell_equivalent_p(cell /*c1*/, cell /*c2*/);
286 extern reference cell_to_reference(cell /*c*/);
287 extern bool effect_list_consistent_p(list /*el*/);
288 extern bool union_compatible_effects_p(effect /*ef1*/, effect /*ef2*/);
289 extern entity effect_to_entity(effect /*ef*/);
290 extern bool vect_contains_phi_p(Pvecteur /*v*/);
294 extern void points_to_cell_add_fixed_subscripts(cell /*c*/, bool /*zero_p*/);
295 extern void points_to_cell_add_zero_subscripts(cell /*c*/);
296 extern void points_to_cell_add_zero_subscript(cell /*c*/);
299 extern void points_to_cell_update_last_subscript(cell /*c*/, expression /*s*/);
300 extern bool atomic_effect_p(effect /*e*/);
302 extern list cell_to_pointer_cells(cell /*c*/);
303 /* anywhere_abstract_locations.c */
304 extern entity entity_all_locations(void);
305 extern entity entity_anywhere_locations(void);
306 extern bool entity_all_locations_p(entity /*e*/);
309 extern bool entity_anywhere_locations_p(entity /*e*/);
310 extern bool cell_typed_anywhere_locations_p(cell /*c*/);
312 extern bool entity_typed_anywhere_locations_p(entity /*e*/);
313 extern entity entity_nowhere_locations(void);
315 extern bool entity_nowhere_locations_p(entity /*e*/);
316 extern bool entity_typed_nowhere_locations_p(entity /*e*/);
317 extern entity entity_null_locations(void);
318 extern bool entity_null_locations_p(entity /*e*/);
320 extern bool entity_all_module_locations_p(entity /*e*/);
321 extern entity entity_all_module_xxx_locations(entity /*m*/, const char */*xxx*/);
322 extern entity entity_all_module_xxx_locations_typed(const char */*mn*/, const char */*xxx*/, type /*t*/);
323 extern bool entity_all_module_xxx_locations_p(entity /*e*/, string /*xxx*/);
324 extern entity entity_all_xxx_locations(string /*xxx*/);
325 extern entity entity_all_xxx_locations_typed(string /*xxx*/, type /*t*/);
326 extern bool entity_all_xxx_locations_p(entity /*e*/, string /*xxx*/);
329 extern bool entity_all_module_heap_locations_p(entity /*e*/);
330 extern entity entity_all_heap_locations(void);
331 extern bool entity_all_heap_locations_p(entity /*e*/);
336 extern bool entity_all_stack_locations_p(entity /*e*/);
340 extern bool entity_all_static_locations_p(entity /*e*/);
344 extern bool entity_all_dynamic_locations_p(entity /*e*/);
345 extern bool entity_stub_sink_p(entity /*e*/);
346 extern bool stub_entity_of_module_p(entity /*s*/, entity /*m*/);
347 extern bool entity_abstract_location_p(entity /*al*/);
349 extern entity abstract_locations_max(entity /*al1*/, entity /*al2*/);
350 extern entity entity_locations_max(entity /*al1*/, entity /*al2*/);
352 extern void check_abstract_locations(void);
353 extern bool abstract_locations_may_conflict_p(entity /*al1*/, entity /*al2*/);
354 extern bool abstract_locations_must_conflict_p(entity /*al1*/, entity /*al2*/);
356 extern cell make_anywhere_cell(type /*t*/);
357 /* abstract_location.c */
358 extern bool entity_heap_location_p(entity /*b*/);
359 extern entity entity_flow_or_context_sentitive_heap_location(int /*stmt_number*/, type /*t*/);
361 extern type malloc_arg_to_type(expression /*e*/);
365 extern reference original_malloc_to_abstract_location(expression /*lhs*/, type /*var_t*/, type /*cast_t*/, expression /*sizeof_exp*/, entity /*f*/, statement /*stmt*/);
366 extern sensitivity_information make_sensitivity_information(statement /*current_stmt*/, entity /*current_module*/, list /*enclosing_flow*/);
367 /* points_to.c */
368 extern bool pt_to_list_undefined_p(void);
369 extern void reset_pt_to_list(void);
370 extern void error_reset_pt_to_list(void);
373 extern void init_pt_to_list(void);
374 extern void close_pt_to_list(void);
375 extern void store_pt_to_list(statement /*k*/, points_to_list /*v*/);
376 extern void update_pt_to_list(statement /*k*/, points_to_list /*v*/);
379 extern bool bound_pt_to_list_p(statement /*k*/);
380 extern void store_or_update_pt_to_list(statement /*k*/, points_to_list /*v*/);
382 extern bool formal_parameter_points_to_cell_p(cell /*c*/);
383 extern bool stub_points_to_cell_p(cell /*c*/);
384 extern bool points_to_cell_in_list_p(cell /*c*/, list /*L*/);
385 extern list merge_points_to_cell_lists(list /*l1*/, list /*l2*/);
386 extern bool related_points_to_cell_in_list_p(cell /*c*/, list /*L*/);
387 extern bool related_points_to_cells_p(cell /*c1*/, cell /*c2*/);
388 extern void fprint_points_to_cell(FILE */*f*/, cell /*c*/);
389 extern void print_points_to_cell(cell /*c*/);
390 extern void print_points_to_cells(list /*cl*/);
391 extern bool field_reference_expression_p(expression /*e*/);
395 extern bool atomic_points_to_cell_p(cell /*c*/);
396 extern bool generic_atomic_points_to_cell_p(cell /*c*/, bool /*strict_p*/);
397 extern bool generic_atomic_points_to_reference_p(reference /*r*/, bool /*strict_p*/);
399 extern bool points_to_cells_intersect_p(cell /*lc*/, cell /*rc*/);
404 extern bool points_to_array_reference_p(reference /*r*/);
406 extern void complete_points_to_reference_with_fixed_subscripts(reference /*r*/, bool /*zero_p*/);
408 extern bool cells_must_point_to_null_p(list /*cl*/);
409 extern bool cells_may_not_point_to_null_p(list /*cl*/);
410 extern bool cell_points_to_non_null_sink_in_set_p(cell /*source*/, set /*pts*/);
411 extern bool cell_points_to_nowhere_sink_in_set_p(cell /*source*/, set /*pts*/);
412 extern bool cell_must_point_to_nowhere_sink_in_set_p(cell /*source*/, set /*pts*/);
413 extern bool cell_points_to_null_sink_in_set_p(cell /*source*/, set /*pts*/);
414 extern bool points_to_cell_equal_p(cell /*c1*/, cell /*c2*/);
415 extern bool similar_arc_in_points_to_set_p(points_to /*spt*/, set /*in*/, approximation */*pa*/);
418 extern bool exact_points_to_subscript_list_p(list /*sl*/);
419 extern bool compatible_points_to_subscripts_p(expression /*s1*/, expression /*s2*/);
420 extern points_to points_to_with_stripped_sink(points_to /*pt*/, int (* /*line_number_func*/)(void));
423 extern bool constant_points_to_indices_p(list /*sl*/);
424 extern bool store_independent_points_to_indices_p(list /*sl*/);
425 /* cell_relations.c */
426 extern list cell_relations_generic_binary_op(list /*l1*/, list /*l2*/, bool (* /*cr1_cr2_combinable_p*/)(cell_relation, cell_relation), list (* /*cr1_cr2_binary_op*/)(cell_relation, cell_relation), list (* /*cr1_unary_op*/)(cell_relation), list (* /*cr2_unary_op*/)(cell_relation), list (* /*union_op*/)(list, list));
427 /* pointer_values.c */
430 extern bool undefined_pointer_value_entity_p(entity /*e*/);
431 extern bool undefined_pointer_value_cell_p(cell /*c*/);
432 extern entity null_pointer_value_entity(void);
434 extern bool null_pointer_value_entity_p(entity /*e*/);
435 extern bool null_pointer_value_cell_p(cell /*c*/);
436 extern bool abstract_pointer_value_entity_p(entity /*e*/);
437 extern bool abstract_pointer_value_cell_p(cell /*c*/);
438 extern cell_relation make_value_of_pointer_value(cell /*c1*/, cell /*c2*/, tag /*app_tag*/, descriptor /*d*/);
439 extern cell_relation make_address_of_pointer_value(cell /*c1*/, cell /*c2*/, tag /*app_tag*/, descriptor /*d*/);
440 extern bool pv_cells_syntactically_equal_p(cell_relation /*pv1*/, cell_relation /*pv2*/);
441 extern bool pv_cells_mergeable_p(cell_relation /*pv1*/, cell_relation /*pv2*/);
442 /* compare.c */
443 extern int cell_reference_compare(reference */*pr1*/, reference */*pr2*/);
444 extern int cell_compare(cell */*c1*/, cell */*c2*/);
445 extern int effect_compare(effect */*peff1*/, effect */*peff2*/);
446 extern int compare_effect_reference(effect */*e1*/, effect */*e2*/);
447 extern int compare_effect_reference_in_common(effect */*e1*/, effect */*e2*/);
448 extern int pointer_value_compare(cell_relation */*ppv1*/, cell_relation */*ppv2*/);
449 extern int is_inferior_cell_descriptor_pvarval(Pvecteur */*pvarval1*/, Pvecteur */*pvarval2*/);
450 /* prettyprint.c */
451 extern list effect_words_reference(reference /*obj*/);
452 extern string effect_reference_to_string(reference /*ref*/);
453 extern const char *pips_region_user_name(entity /*ent*/);
454 extern list words_fictious_reference(reference /*obj*/);
456 extern list word_points_to(points_to /*pt*/);
457 extern int points_to_compare_cells(const void */*vpt1*/, const void */*vpt2*/);
458 extern list points_to_list_sort(list /*ptl*/);
459 extern list words_points_to_list(string /*note*/, points_to_list /*s*/);
460 extern list words_pointer_value(cell_relation /*pv*/);
461 extern string approximation_to_string(approximation /*a*/);
462 extern text text_pointer_value(cell_relation /*pv*/);
463 extern text text_pointer_values(list /*lpv*/, string /*header*/);
464 extern void print_pointer_value(cell_relation /*pv*/);
465 extern void print_pointer_values(list /*lpv*/);
466 /* type.c */
467 extern entity effect_field_dimension_entity(expression /*exp*/, list /*l_fields*/);
468 extern bool effect_reference_contains_pointer_dimension_p(reference /*ref*/, bool */*exact_p*/);
469 extern bool effect_reference_dereferencing_p(reference /*ref*/, bool */*exact_p*/);
470 extern type cell_reference_to_type(reference /*ref*/, bool */*to_be_freed*/);
471 extern type cell_to_type(cell /*c*/, bool */*to_be_freed*/);
472 extern type points_to_reference_to_type(reference /*ref*/, bool */*to_be_freed*/);
473 extern type points_to_expression_to_type(expression /*e*/, bool */*to_be_freed*/);
476 extern type points_to_cell_to_type(cell /*c*/, bool */*to_be_freed*/);
480 extern bool types_compatible_for_effects_interprocedural_translation_p(type /*real_arg_t*/, type /*formal_arg_t*/);
481 extern void points_to_cell_types_compatibility(cell /*l*/, cell /*r*/);
482 extern bool points_to_source_cell_compatible_p(cell /*c*/);
483 extern bool points_to_sink_cell_compatible_p(cell /*c*/);
484 extern list find_points_to_subscript_for_type(cell /*c*/, type /*t*/);
485 extern bool adapt_reference_to_type(reference /*r*/, type /*et*/, int (* /*line_number_func*/)(void));
486 extern bool reference_unbounded_indices_p(reference /*r*/);
487 extern bool strict_constant_path_p(reference /*r*/);
488 extern bool can_be_constant_path_p(reference /*r*/);
489 /* conflicts.c */
490 extern void set_conflict_testing_properties(void);
491 extern bool effects_must_conflict_p(effect /*eff1*/, effect /*eff2*/);
492 extern bool effects_might_conflict_even_read_only_p(effect /*eff1*/, effect /*eff2*/);
493 extern bool effects_may_conflict_p(effect /*eff1*/, effect /*eff2*/);
494 extern bool effects_conflict_p(effect /*eff1*/, effect /*eff2*/);
495 extern bool array_references_may_conflict_p(list /*sl1*/, list /*sl2*/);
496 extern bool variable_references_may_conflict_p(entity /*v*/, list /*sl1*/, list /*sl2*/);
497 extern bool references_may_conflict_p(reference /*r1*/, reference /*r2*/);
498 extern bool references_must_conflict_p(reference /*r1*/, reference /*r2*/);
499 extern bool cells_may_conflict_p(cell /*c1*/, cell /*c2*/);
500 extern bool points_to_cell_lists_may_conflict_p(list /*l1*/, list /*l2*/);
501 extern bool cells_must_conflict_p(cell /*c1*/, cell /*c2*/);
502 extern bool points_to_cell_lists_must_conflict_p(list /*l1*/, list /*l2*/);
503 extern bool entities_maymust_conflict_p(entity /*e1*/, entity /*e2*/, bool /*must_p*/);
504 extern bool entities_may_conflict_p(entity /*e1*/, entity /*e2*/);
505 extern bool entities_must_conflict_p(entity /*e1*/, entity /*e2*/);
506 extern bool first_effect_certainly_includes_second_effect_p(effect /*eff1*/, effect /*eff2*/);
510 extern bool generic_effects_maymust_read_or_write_scalar_entity_p(list /*fx*/, entity /*e*/, bool /*must_p*/, bool /*concrete_p*/);
511 extern bool effects_maymust_read_or_write_scalar_entity_p(list /*fx*/, entity /*e*/, bool /*must_p*/);
512 extern bool concrete_effects_maymust_read_or_write_scalar_entity_p(list /*fx*/, entity /*e*/, bool /*must_p*/);
513 extern bool effects_may_read_or_write_scalar_entity_p(list /*fx*/, entity /*e*/);
515 extern bool effects_must_read_or_write_scalar_entity_p(list /*fx*/, entity /*e*/);
518 /* locations.c */
519 extern entity make_location_entity(reference /*cp*/);
521 extern bool location_entity_p(entity /*le*/);
522 extern bool location_entity_of_module_p(entity /*le*/, entity /*m*/);
523 extern bool array_location_entity_of_module_p(entity /*le*/, entity /*m*/);
525 #endif /* effects_util_header_included */
static string current_module
Definition: message.c:63
static statement current_stmt
bool formal_parameter_points_to_cell_p(cell)
Definition: points_to.c:99
bool reference_unbounded_indices_p(reference)
This function should be at expression.c.
Definition: type.c:1373
bool cell_typed_anywhere_locations_p(cell)
test if a cell is the bottom of the lattice
bool io_cell_p(cell)
Definition: effects.c:506
bool cell_points_to_null_sink_in_set_p(cell, set)
Definition: points_to.c:898
reference reference_add_field_dimension(reference, entity)
add a field f as a subscript to a reference r if it is meaningful.
Definition: effects.c:1475
bool effects_read_variable_p(list, entity)
Definition: effects.c:1123
bool undefined_pointer_value_cell_p(cell)
bool type_declaration_effect_p(effect)
Definition: effects.c:1080
bool pv_cells_syntactically_equal_p(cell_relation, cell_relation)
action_kind action_to_action_kind(action)
Without the consistency test, this function would certainly be inlined.
Definition: effects.c:1048
bool related_points_to_cell_in_list_p(cell, list)
Two cells are related if they are based on the same entity.
Definition: points_to.c:149
void points_to_cell_add_fixed_subscripts(cell, bool)
Convert a reference to an array into a reference to its first element.
Definition: effects.c:1594
tag approximation_and(tag, tag)
tag approximation_and(tag t1, tag t2) input : two approximation tags.
Definition: effects.c:1198
bool location_entity_p(entity)
Definition: locations.c:349
bool location_entity_of_module_p(entity, entity)
Definition: locations.c:360
void check_abstract_locations(void)
For debugging the API.
bool entity_all_module_xxx_locations_p(entity, string)
test if an entity is the set of all memory locations in the xxx area of a module.
void print_pointer_value(cell_relation)
Definition: prettyprint.c:615
bool effect_on_non_local_variable_p(effect)
Test if an effect has a non local effect.
Definition: effects.c:674
type cell_to_type(cell, bool *)
Definition: type.c:513
effect effect_to_pointer_store_independent_effect(effect, entity)
Modify eff so that the set of memory locations decribed after a write to some pointer p is still in t...
Definition: effects.c:815
bool effect_abstract_location_p(effect)
Definition: effects.c:280
list effect_words_reference(reference)
prettyprint.c
Definition: prettyprint.c:68
bool cell_equal_p(cell, cell)
CELLS.
Definition: effects.c:1226
type points_to_reference_to_concrete_type(reference)
Definition: type.c:685
entity entity_all_stack_locations(void)
return ANY_MODULE:STACK
entity entity_locations_dereference(entity)
cell make_anywhere_points_to_cell(type)
Function storing points to information attached to a statement.
Definition: points_to.c:87
const char * pips_region_user_name(entity)
char * pips_region_user_name(entity ent) output : the name of entity.
Definition: prettyprint.c:169
bool pv_cells_mergeable_p(cell_relation, cell_relation)
bool effects_write_variable_p(list, entity)
Definition: effects.c:1091
bool cell_equivalent_p(cell, cell)
Check that memory locations denoted by cell "c1" can be reached by knowing cell "c2" and by using poi...
Definition: effects.c:1311
type points_to_cell_to_type(cell, bool *)
FI: I need more generality than is offered by cell_to_type()
Definition: type.c:665
entity entity_all_xxx_locations_typed(string, type)
FI->AM: the predicate entity_all_xxx_locations_typed_p() is missing...
list cell_indices(cell)
Definition: effects.c:64
cell points_to_cells_minimal_upper_bound(list)
reference cell_any_reference(cell)
API for reference.
Definition: effects.c:77
statement_mapping effectsmap_to_listmap(statement_mapping)
Definition: effects.c:228
reference points_to_cells_minimal_reference_upper_bound(entity, type, list)
cell points_to_cell_add_field_dimension(cell, entity)
Functions about points-to cells - There is no cell.c file.
Definition: effects.c:1444
bool points_to_source_cell_compatible_p(cell)
Definition: type.c:1241
bool reference_typed_anywhere_locations_p(reference)
test if a reference is the bottom of the lattice
bool effects_write_p(list)
Definition: effects.c:1108
void points_to_cell_add_unbounded_subscripts(cell)
Definition: effects.c:1632
list points_to_list_sort(list)
Allocate a copy of ptl and sort it.
Definition: prettyprint.c:389
bool cells_may_not_point_to_null_p(list)
Definition: points_to.c:763
void print_pointer_values(list)
Definition: prettyprint.c:622
entity null_pointer_value_entity(void)
bool effect_reference_dereferencing_p(reference, bool *)
Definition: type.c:233
points_to points_to_with_stripped_sink(points_to, int(*)(void))
The value of the source can often be expressed with different subscript lists.
Definition: points_to.c:1074
bool basic_concrete_types_compatible_for_effects_interprocedural_translation_p(type, type)
tests if the actual argument type and the formal argument type are compatible with the current state ...
Definition: type.c:699
bool generic_atomic_points_to_reference_p(reference, bool)
Is it a unique concrete memory location?
Definition: points_to.c:489
bool entity_all_module_stack_locations_p(entity)
test if an entity is the a stack area
entity effect_entity(effect)
cproto-generated files
Definition: effects.c:52
entity entity_all_heap_locations(void)
return ANY_MODULE:HEAP
void print_points_to_cells(list)
Debug.
Definition: points_to.c:202
bool typed_anywhere_effect_p(effect)
Is it a typed anywhere effect? ANYMMODULE:ANYWHERE_b0, 1, 2.
Definition: effects.c:352
string approximation_to_string(approximation)
Definition: prettyprint.c:458
bool atomic_effect_p(effect)
Definition: effects.c:1668
list points_to_reference_to_typed_index(reference, type)
Look for the index in "r" that corresponds to a pointer of type "t" and return the corresponding elem...
Definition: points_to.c:361
bool anywhere_reference_p(reference)
Definition: effects.c:378
action make_action_write_memory(void)
To ease the extension of action with action_kind.
Definition: effects.c:1011
type points_to_cell_to_concrete_type(cell)
Definition: type.c:676
bool entity_heap_location_p(entity)
abstract_location.c
bool entity_all_module_locations_p(entity)
test if an entity is the set of locations defined in a module
bool entity_all_heap_locations_p(entity)
test if an entity is the set of all heap locations
int compare_effect_reference(effect *, effect *)
int compare_effect_reference(e1, e2):
Definition: compare.c:210
bool abstract_pointer_value_cell_p(cell)
int points_to_reference_to_final_dimension(reference)
Compute the number of array subscript at the end of a points_to_reference.
Definition: points_to.c:244
void store_pt_to_list(statement, points_to_list)
type points_to_reference_to_type(reference, bool *)
FI: I need more generality than is offered by cell_to_type()
Definition: type.c:527
bool recursive_store_independent_points_to_reference_p(type, list)
Definition: points_to.c:1169
bool effects_abstract_location_p(list)
Returns true if at least one effect of effect list el is related to an abstract location.
Definition: effects.c:288
bool heap_effect_p(effect)
Definition: effects.c:408
bool field_reference_expression_p(expression)
Check if expression "e" is a reference to a struct field.
Definition: points_to.c:224
bool cell_points_to_nowhere_sink_in_set_p(cell, set)
Definition: points_to.c:845
entity abstract_locations_max(entity, entity)
eturns the smallest abstract location set greater than or equalt to al1 and al2.
list cell_to_pointer_cells(cell)
If the reference in "c" is not a pointer, see if it can be transformed into a pointer reference by ad...
Definition: effects.c:1739
string full_action_to_short_string(action)
Definition: effects.c:969
entity entity_flow_or_context_sentitive_heap_location(int, type)
sensitivity_information make_sensitivity_information(statement, entity, list)
bool undefined_pointer_value_entity_p(entity)
reference original_malloc_to_abstract_location(expression, type, type, expression, entity, statement)
bool points_to_cell_equal_p(cell, cell)
Definition: points_to.c:916
bool stub_entity_of_module_p(entity, entity)
bool related_points_to_cells_p(cell, cell)
Definition: points_to.c:165
list module_to_analyzed_array_locations(entity)
m is supposed to be a module entity
Definition: locations.c:393
bool effect_list_consistent_p(list)
Debugging.
Definition: effects.c:1340
bool statement_has_a_module_formal_argument_write_effect_p(statement, entity, statement_mapping)
Return true if the statement has a write effect on at least one of the argument (formal parameter) of...
Definition: effects.c:247
entity malloc_to_abstract_location(expression, sensitivity_information *)
generate an abstract heap location entity
bool store_effect_p(effect)
Definition: effects.c:1062
type points_to_expression_to_pointed_type(expression)
Return a new allocated type "t" of the address pointed by expression "e", if expression "e" denotes a...
Definition: type.c:631
action_kind effect_action_kind(effect)
Definition: effects.c:1055
bool std_file_cell_p(cell)
Definition: effects.c:524
void print_points_to_cell(cell)
Debug: use stderr.
Definition: points_to.c:196
int pointer_value_compare(cell_relation *, cell_relation *)
Compares two pointer values for sorting.
Definition: compare.c:255
bool entity_all_locations_p(entity)
test if an entity is the top of the lattice
void store_or_update_pt_to_list(statement, points_to_list)
bool entity_flow_or_context_sentitive_heap_location_p(entity)
points_to_list load_pt_to_list(statement)
entity make_location_entity(reference)
locations.c
Definition: locations.c:274
list word_points_to(points_to)
Definition: prettyprint.c:242
entity entity_typed_nowhere_locations(type)
cell make_null_pointer_value_cell(void)
bool entity_typed_anywhere_locations_p(entity)
Test if an entity is the bottom of the lattice.
text text_pointer_value(cell_relation)
text text_region(effect reg) input : a region output : a text consisting of several lines of commenta...
Definition: prettyprint.c:480
bool effect_scalar_p(effect)
Definition: effects.c:567
bool points_to_reference_included_p(reference, reference)
FI->FC/AM: some elements of the lattice must be exploited here...
Definition: effects.c:1243
bool entity_all_static_locations_p(entity)
test if an entity is the set of all static locations
entity effect_field_dimension_entity(expression, list)
type.c
Definition: type.c:51
int effect_compare(effect *, effect *)
Compares two effects for sorting.
Definition: compare.c:187
bool points_to_sink_cell_compatible_p(cell)
bool malloc_reference_p(reference)
Definition: effects.c:488
bool memory_dereferencing_p(reference)
Does the set of locations referenced by r depend on a pointer dereferencing?
Definition: effects.c:92
list words_pointer_value(cell_relation)
Definition: prettyprint.c:428
statement_mapping listmap_to_effectsmap(statement_mapping)
Definition: effects.c:216
void fprint_points_to_cell(FILE *, cell)
reference cell_to_reference(cell)
FI: probably to be moved elsewhere in ri-util.
Definition: effects.c:1326
bool cell_included_p(cell, cell)
Check that all memory locations denoted by cell "c1" are included in cell "c2".
Definition: effects.c:1294
tag approximation_or(tag, tag)
tag approximation_or(tag t1, tag t2) input : two approximation tags.
Definition: effects.c:1213
cell_relation make_address_of_pointer_value(cell, cell, tag, descriptor)
entity entity_locations_max(entity, entity)
Here, entity al1 and entity al2 can be program variables.
void set_pt_to_list(statement_points_to)
bool entity_nowhere_locations_p(entity)
test if an entity is the bottom of the lattice
bool FILE_star_effect_reference_p(reference)
Definition: effects.c:536
list effects_to_list(effects)
Definition: effects.c:209
bool io_effect_entity_p(entity)
Definition: effects.c:496
type points_to_expression_to_type(expression, bool *)
FI: I need more generality than is offered by expression_to_type() because fields are assimilated to ...
Definition: type.c:592
entity entity_all_module_heap_locations_typed(entity, type)
bool strict_constant_path_p(reference)
Definition: type.c:1407
bool anywhere_cell_p(cell)
Is it an anywhere cell?
Definition: effects.c:367
cell_relation make_value_of_pointer_value(cell, cell, tag, descriptor)
bool abstract_locations_may_conflict_p(entity, entity)
Do these two abstract locations MAY share some real memory locations ?
entity entity_all_module_heap_locations(entity)
return m:*HEAP**ANYWHERE
entity entity_all_module_static_locations(entity)
return m:*DYNAMIC**ANYWHERE
list recursive_cell_to_pointer_cells(cell)
Definition: effects.c:1680
void points_to_cell_complete_with_zero_subscripts(cell)
Definition: effects.c:1626
entity entity_all_module_locations(entity)
return m:ANYWHERE Set of all memory locations related to one module.
bool cell_entity_equal_p(cell, cell)
Definition: effects.c:1234
bool all_heap_locations_cell_p(cell)
Definition: effects.c:432
bool cell_points_to_non_null_sink_in_set_p(cell, set)
A set of functions called cell_points_to_xxxx(cell s, set pts) where set pts is a points-to relation ...
Definition: points_to.c:822
type points_to_expression_to_concrete_type(expression)
The type returned is stored in a hash-table.
Definition: type.c:617
entity entity_typed_anywhere_locations(type)
list points_to_cells_to_upper_bound_points_to_cells(list)
Add to list "l" cells that are upper bound cells of the cells already in list "l" and return list "l"...
Definition: points_to.c:1007
string action_to_string(action)
Functions dealing with actions.
Definition: effects.c:936
effect heap_effect(entity, action)
Definition: effects.c:391
bool compatible_points_to_subscripts_p(expression, expression)
Two subscript are compatible if they are equal or if one of them is unbounded.
Definition: points_to.c:1041
effect effect_to_non_pointer_store_independent_effect(effect)
Modify eff so that the set of memory locations decribed after a write to some non pointer variable is...
Definition: effects.c:844
bool generic_atomic_points_to_cell_p(cell, bool)
Is it a unique concrete memory location?
Definition: points_to.c:452
type points_to_cells_minimal_type_upper_bound(list)
bool entity_null_locations_p(entity)
test if an entity is the NULL POINTER
entity entity_all_heap_locations_typed(type)
entity entity_anywhere_locations(void)
bool nowhere_cell_p(cell)
Target of an undefined pointer.
Definition: effects.c:455
bool store_independent_points_to_indices_p(list)
check that the subscript list il is either empty or made of integers or fields or unbounded entity "*...
Definition: points_to.c:1301
reference simple_reference_add_field_dimension(reference, entity)
Do not check anything, just add f as a last subscript.
Definition: effects.c:1581
int cell_compare(cell *, cell *)
Definition: compare.c:168
entity entity_null_locations(void)
return TOP-LEVEL:NULL_POINTER The NULL pointer should be a global variable, unique for all modules FI...
bool union_compatible_effects_p(effect, effect)
DO NOT USE ANYMORE: NOT COMPATIBLE WITH ABSTRACT LOCATIONS.
Definition: effects.c:1354
entity entity_all_module_dynamic_locations(entity)
return m:*DYNAMIC**ANYWHERE
bool environment_effect_p(effect)
Definition: effects.c:1071
bool cells_must_point_to_null_p(list)
Definition: points_to.c:750
list points_to_cell_to_upper_bound_points_to_cells(cell)
Return a list of cells that are larger than cell "c" in the points-to cell lattice.
Definition: points_to.c:973
entity entity_all_module_xxx_locations(entity, const char *)
return m:xxx*ANYWHERE* Generic set of functions for all kinds of areas
bool effects_all_read_p(list)
Check that all effects in el are read effects.
Definition: effects.c:1141
bool cell_must_point_to_nowhere_sink_in_set_p(cell, set)
How are array handled in pts? do we have arcs "a->a"?
Definition: points_to.c:870
bool entity_anywhere_locations_p(entity)
test if an entity is the bottom of the lattice
entity variable_to_abstract_location(entity)
returns the smallest abstract locations containing the location of variable v.
bool malloc_effect_p(effect)
Definition: effects.c:478
entity calloc_to_abstract_location(expression, expression, sensitivity_information *)
generate an abstract heap location entity
type cell_reference_to_type(reference, bool *)
computes the type of a cell reference representing a memory access path.
Definition: type.c:466
list cell_relations_generic_binary_op(list, list, bool(*)(cell_relation, cell_relation), list(*)(cell_relation, cell_relation), list(*)(cell_relation), list(*)(cell_relation), list(*)(list, list))
cell_relations.c
bool pt_to_list_undefined_p(void)
points_to.c
points_to_list delete_pt_to_list(statement)
bool malloc_cell_p(cell)
Definition: effects.c:483
text text_pointer_values(list, string)
Definition: prettyprint.c:571
bool action_equal_p(action, action)
Definition: effects.c:1023
void init_pt_to_list(void)
effect anywhere_effect(action)
Anywhere effect: an effect which can be related to any location of any areas.
Definition: effects.c:317
bool points_to_array_reference_p(reference)
Is this a reference to an array or a reference to a pointer? This is not linked to the type of the re...
Definition: points_to.c:599
bool can_be_constant_path_p(reference)
TODO most of the time return same result that !effect_reference_dereferencing_p for the moment want t...
Definition: type.c:1492
bool effects_interfere_p(effect, effect)
Two effects interfere if one of them modify the set of locations defined by the other one.
Definition: effects.c:714
bool points_to_cell_in_list_p(cell, list)
Definition: points_to.c:117
list words_fictious_reference(reference)
To modelize the heap locations we manufacture fictious reference, that triggered a bug when it appear...
Definition: prettyprint.c:215
entity entity_all_locations(void)
anywhere_abstract_locations.c
bool atomic_points_to_cell_p(cell)
Is it a unique concrete memory location?
Definition: points_to.c:423
entity entity_all_module_xxx_locations_typed(const char *, const char *, type)
bool anywhere_effect_p(effect)
Is it an anywhere effect? ANYMMODULE:ANYWHERE
Definition: effects.c:346
bool entity_all_module_static_locations_p(entity)
test if an entity is the a static area
cell make_anywhere_cell(type)
bool atomic_points_to_reference_p(reference)
Definition: points_to.c:519
void points_to_cell_add_zero_subscript(cell)
Definition: effects.c:1620
list find_points_to_subscript_for_type(cell, type)
Find the subscript in the reference of cell "c" that would make the reference type be "t" if the subs...
Definition: type.c:1274
void update_pt_to_list(statement, points_to_list)
bool io_effects_p(list effects)
Definition: effects.c:512
void error_reset_pt_to_list(void)
cell make_undefined_pointer_value_cell(void)
entity malloc_type_to_abstract_location(type, sensitivity_information *)
generate an abstract heap location entity
bool std_file_effect_p(effect)
Definition: effects.c:519
list words_points_to_list(string, points_to_list)
type points_to_array_reference_to_type(reference)
If this is an array reference, what is the type of the underlying array type?
Definition: points_to.c:657
string full_action_to_string(action)
Definition: effects.c:943
void points_to_cell_types_compatibility(cell, cell)
Make sure that cell l can points towards cell r.
Definition: type.c:985
void reset_pt_to_list(void)
action make_action_read_memory(void)
Definition: effects.c:1017
entity generic_entity_typed_anywhere_locations(type)
list points_to_words_reference(reference)
Specific handling of references appearing in points_to.
Definition: prettyprint.c:232
bool entity_all_xxx_locations_p(entity, string)
test if an entity is the set of all memory locations in the xxx area of any module.
bool array_location_entity_of_module_p(entity, entity)
Expanded version of location_entity_of_module_p()
Definition: locations.c:374
list merge_points_to_cell_lists(list, list)
Add in "l1" elements of "l2" that are not yet in "l1".
Definition: points_to.c:134
entity entity_nowhere_locations(void)
return ANY_MODULE:NOWHERE
void close_pt_to_list(void)
bool effect_list_can_be_safely_full_freed_p(list)
Check if some references might be freed with the effects.
Definition: effects.c:1159
bool entity_stub_sink_p(entity)
test if an entity is a stub sink for a formal parameter e.g.
bool adapt_reference_to_type(reference, type, int(*)(void))
FI: a really stupid function...
Definition: type.c:1327
bool entity_all_module_dynamic_locations_p(entity)
test if an entity is the a dynamic area
entity effect_to_entity(effect)
Returns the entity corresponding to the mutation.
Definition: effects.c:1413
bool types_compatible_for_effects_interprocedural_translation_p(type, type)
tests if the actual argument type and the formal argument type are compatible with the current state ...
Definition: type.c:932
bool cell_abstract_location_p(cell)
Definition: effects.c:273
bool entity_all_stack_locations_p(entity)
test if an entity is the set of all stack locations
bool entity_abstract_location_p(entity)
statement_points_to get_pt_to_list(void)
bool entity_typed_nowhere_locations_p(entity)
test if an entity is the bottom of the lattice
void complete_points_to_reference_with_zero_subscripts(reference)
Definition: points_to.c:745
string effect_reference_to_string(reference)
Definition: prettyprint.c:155
entity points_to_cells_minimal_module_upper_bound(list)
entity constant_memory_access_path_to_location_entity(reference)
A constant memory access path may not be considered.
Definition: locations.c:329
effects list_to_effects(list)
Future API for GAP, Generic Access Path.
Definition: effects.c:202
int points_to_compare_cells(const void *, const void *)
Comparison of two points-to arcs based on their source and sink nodes.
Definition: prettyprint.c:295
bool store_independent_effect_p(effect)
Does this effect define the same set of memory locations regardless of the current (environment and) ...
Definition: effects.c:636
bool std_file_effects_p(list effects)
Definition: effects.c:529
bool abstract_locations_must_conflict_p(entity, entity)
bool null_pointer_value_cell_p(cell)
bool null_pointer_value_entity_p(entity)
void points_to_reference_update_final_subscripts(reference, list)
Substitute the subscripts "sl" in points-to reference "r" just after the last field subscript by "nsl...
Definition: points_to.c:278
bool any_anywhere_effect_p(effect)
Is it a typed or untyped anywhere effect?
Definition: effects.c:358
bool entity_all_module_heap_locations_p(entity)
test if an entity is the a heap area
bool null_cell_p(cell)
Definition: effects.c:466
bool stub_points_to_cell_p(cell)
Definition: points_to.c:108
type malloc_arg_to_type(expression)
generate the type of the allocated area from the malloc argument
void points_to_cell_update_last_subscript(cell, expression)
Transform reference a[i]...[j] and expression s into reference a[i]..[j+s] if j and s are constant in...
Definition: effects.c:1643
bool effects_on_non_local_variable_p(list effects)
Test if a list of effects concerns non local variables.
Definition: effects.c:687
effect effect_to_store_independent(effect)
Definition: effects.c:772
bool effect_comparable_p(effect, effect)
Can we merge these two effects because they are equal or because they only differ by their approximat...
Definition: effects.c:587
effect effect_interference(effect, effect)
Modifies effect eff1 to make sure that any memory state modification abstracted by eff2 preserves the...
Definition: effects.c:863
entity entity_all_module_stack_locations(entity)
return m:*STACK**ANYWHERE
void complete_points_to_reference_with_fixed_subscripts(reference, bool)
Add a set of zero subscripts to a constant memory path reference "r" by side effect.
Definition: points_to.c:696
string action_kind_to_string(action_kind)
Definition: effects.c:995
int cell_reference_compare(reference *, reference *)
compare.c
Definition: compare.c:54
bool constant_points_to_indices_p(list)
check that the subscript list il is either empty or made of integers or fields.
Definition: points_to.c:1272
void points_to_cell_add_zero_subscripts(cell)
Definition: effects.c:1615
bool heap_cell_p(cell)
Any heap cell, more or less abstract or typed.
Definition: effects.c:420
bool bound_pt_to_list_p(statement)
reference make_anywhere_reference(type)
This function should be located somewhere in effect-util in or near abstract locations.
bool store_independent_points_to_reference_p(reference)
Functions for points-to references, the kind of references used in points-to cells.
Definition: points_to.c:1247
entity undefined_pointer_value_entity(void)
pointer_values.c
bool io_effect_p(effect)
Definition: effects.c:501
bool entity_all_dynamic_locations_p(entity)
test if an entity is the set of all dynamic locations
int is_inferior_cell_descriptor_pvarval(Pvecteur *, Pvecteur *)
weight function for Pvecteur passed as argument to sc_lexicographic_sort in prettyprint functions inv...
Definition: compare.c:305
entity entity_all_xxx_locations(string)
return ANY_MODULE:xxx
entity entity_all_dynamic_locations(void)
return ANY_MODULE:DYNAMIC
bool effect_reference_contains_pointer_dimension_p(reference, bool *)
Definition: type.c:219
bool similar_arc_in_points_to_set_p(points_to, set, approximation *)
See if an arc like "spt" exists in set "in", regardless of its approximation.
Definition: points_to.c:929
bool vect_contains_phi_p(Pvecteur)
bool vect_contains_phi_p(Pvecteur v) input : a vector output : true if v contains a PHI variable,...
Definition: effects.c:1427
bool abstract_pointer_value_entity_p(entity)
entity entity_all_static_locations(void)
return ANY_MODULE:STATIC
entity cell_entity(cell)
Definition: effects.c:57
bool points_to_cells_intersect_p(cell, cell)
points-to cells use abstract addresses, hence the proper comparison is an intersection.
Definition: points_to.c:532
bool exact_points_to_subscript_list_p(list)
See if the subscript list sl is precise, i.e.
Definition: points_to.c:1027
int compare_effect_reference_in_common(effect *, effect *)
int compare_effect_reference_in_common(e1, e2):
Definition: compare.c:224
list concrete_effects_entities_which_may_conflict_with_scalar_entity(list, entity)
Definition: conflicts.c:1278
bool first_effect_certainly_includes_second_effect_p(effect, effect)
tests whether first effect certainly includes second one.
Definition: conflicts.c:1060
bool entities_must_conflict_p(entity, entity)
Check if two entities must conflict.
Definition: conflicts.c:992
bool effects_maymust_read_or_write_scalar_entity_p(list, entity, bool)
Definition: conflicts.c:1197
bool points_to_cell_lists_must_conflict_p(list, list)
Same as above, but for lists.
Definition: conflicts.c:729
bool cells_must_conflict_p(cell, cell)
Check if two cell must conflict.
Definition: conflicts.c:722
bool concrete_effects_may_read_or_write_scalar_entity_p(list, entity)
Definition: conflicts.c:1220
bool entities_may_conflict_p(entity, entity)
Check if two entities may conflict.
Definition: conflicts.c:984
bool first_exact_scalar_effect_certainly_includes_second_effect_p(effect, effect)
Definition: conflicts.c:1074
bool effects_might_conflict_even_read_only_p(effect, effect)
Check if two effect might conflict, even if they are read only @description Two effects may conflict ...
Definition: conflicts.c:123
bool references_may_conflict_p(reference, reference)
Check if two references may conflict.
Definition: conflicts.c:426
void set_conflict_testing_properties(void)
conflicts.c
Definition: conflicts.c:68
bool entities_maymust_conflict_p(entity, entity, bool)
Check if two entities may or must conflict.
Definition: conflicts.c:771
bool effects_may_read_or_write_scalar_entity_p(list, entity)
check whether scalar entity e may be read or written by effects fx or cannot be accessed at all
Definition: conflicts.c:1214
bool effects_conflict_p(effect, effect)
Synonym for effects_may_conflict_p().
Definition: conflicts.c:246
bool effects_must_read_or_write_scalar_entity_p(list, entity)
check whether scalar entity e must be read or written by any effect of fx or if it simply might be ac...
Definition: conflicts.c:1235
bool generic_effects_maymust_read_or_write_scalar_entity_p(list, entity, bool, bool)
Definition: conflicts.c:1144
bool cells_may_conflict_p(cell, cell)
Check if two cell may conflict.
Definition: conflicts.c:696
bool variable_references_may_conflict_p(entity, list, list)
FIXME ?
Definition: conflicts.c:314
bool effects_must_conflict_p(effect, effect)
Intersection tests.
Definition: conflicts.c:93
bool concrete_effects_maymust_read_or_write_scalar_entity_p(list, entity, bool)
Definition: conflicts.c:1202
bool effects_may_read_or_write_memory_paths_from_entity_p(list, entity)
tests whether the input effects list may contain effects with a memory path from the input entity e; ...
Definition: conflicts.c:1130
bool points_to_cell_lists_may_conflict_p(list, list)
Same as above, but for lists.
Definition: conflicts.c:703
list effects_entities_which_may_conflict_with_scalar_entity(list, entity)
Definition: conflicts.c:1273
bool array_references_may_conflict_p(list, list)
Check if there may be a conflict between two array references.
Definition: conflicts.c:276
bool effect_may_read_or_write_memory_paths_from_entity_p(effect, entity)
misc functions
Definition: conflicts.c:1103
bool effects_may_conflict_p(effect, effect)
Check if two effect may conflict @description Two effects may conflict if their abstract two location...
Definition: conflicts.c:162
bool references_must_conflict_p(reference, reference)
Check if two references may conflict.
Definition: conflicts.c:607
int tag
TAG.
Definition: newgen_types.h:92
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
FI: I do not understand why the type is duplicated at the set level.
Definition: set.c:59
The structure used to build lists in NewGen.
Definition: newgen_list.h:41