PIPS
initialized_vla.c
Go to the documentation of this file.
1 /*
2 
3  $Id: initialized_vla.c 23495 2018-10-24 09:19:47Z coelho $
4 
5  Copyright 1989-2014 MINES ParisTech
6 
7  This file is part of PIPS.
8 
9  PIPS is free software: you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 
25 // do not compile unless required
26 #include "phases.h"
27 #if defined(BUILDER_CHECK_INITIALIZE_VLA_WITH_EFFECTS) || \
28  defined(BUILDER_CHECK_INITIALIZE_VLA_WITH_PRECONDITIONS) || \
29  defined(BUILDER_CHECK_INITIALIZE_VLA_WITH_REGIONS) || \
30  defined(BUILDER_INITIALIZE_VLA_WITH_EFFECTS) || \
31  defined(BUILDER_INITIALIZE_VLA_WITH_PRECONDITIONS) || \
32  defined(BUILDER_INITIALIZE_VLA_WITH_REGIONS)
33 
34 #ifdef HAVE_CONFIG_H
35  #include "pips_config.h"
36 #endif
37 
38 
39 /**
40  * Pass: CHECK_INITIALIZE_VLA_WITH_PRECONDITIONS
41  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
42  * Properties used:
43  * - ERROR_ON_UNINITIALIZE_VLA
44  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
45  * Resource needed:
46  * - preconditions
47  *
48  * Pass: CHECK_INITIALIZE_VLA_WITH_EFFECTS (not implemented yet)
49  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
50  * Properties used:
51  * - ERROR_ON_UNINITIALIZE_VLA
52  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
53  * Resource needed:
54  * - CUMULATED_EFFECTS/OUT_EFFECTS
55  *
56  * Pass: CHECK_INITIALIZE_VLA_WITH_REGIONS (not implemented yet)
57  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
58  * Properties used:
59  * - ERROR_ON_UNINITIALIZE_VLA
60  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
61  * Resource needed:
62  * - REGIONS/OUT_REGIONS
63  *
64  *
65  * Pass: INITIALIZE_VLA_WITH_PRECONDITIONS
66  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
67  * Properties used:
68  * - INITIALIZE_VLA_VALUE
69  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
70  * Resource needed:
71  * - preconditions
72  *
73  * Pass: INITIALIZE_VLA_WITH_EFFECTS (not implemented yet)
74  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
75  * Properties used:
76  * - INITIALIZE_VLA_VALUE
77  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
78  * Resource needed:
79  * - CUMULATED_EFFECTS/OUT_EFFECTS
80  *
81  * Pass: INITIALIZE_VLA_WITH_REGIONS (not implemented yet)
82  * Debug mode: INITIALIZE_VLA_DEBUG_LEVEL
83  * Properties used:
84  * - INITIALIZE_VLA_VALUE
85  * (- SEMANTICS_ANALYZE_CONSTANT_PATH)
86  * Resource needed:
87  * - REGIONS/OUT_REGIONS
88  */
89 
90 #include <stdlib.h>
91 #include <stdio.h>
92 
93 #include "genC.h"
94 #include "linear.h"
95 
96 #include "misc.h"
97 #include "pipsdbm.h"
98 #include "properties.h"
99 
100 #include "ri.h"
101 #include "ri-util.h"
102 #include "prettyprint.h" // for debugging
103 
104 #include "semantics.h" // used
105 #include "transformer.h" // print_any_transformer
106 
107 /******************************************************
108  * CHECK : BEGIN *
109  ******************************************************/
110 
111 /**
112  * error_on_uninitialize_p/warning_on_uninitialize_p correspond to property ERROR_ON_UNINITIALIZE_VLA (for check pass)
113  * if error_on_uninitialize_p==true, generate error when find uninitialize_vla
114  * if warning_on_uninitialize_p==true, generate warning when find uninitialize_vla
115  * semantics_analyze_constant_path_p correspond to property SEMANTICS_ANALYZE_CONSTANT_PATH
116  * uninitialize_vla_p is false by default, if we find uninitialize_vla it becomes true
117  * it's redundant with to_initialize == NIL or != NIL
118  * to_initialize, list or reference that need an initialization
119  * init_value initial value that we want for to_initialize references.
120  * init_value correspond to property INITIALIZE_VLA_VALUE
121  */
122 typedef struct ctx_initvla {
123  bool error_on_uninitialize_p;
124  bool warning_on_uninitialize_p;
125  bool semantics_analyze_constant_path_p;
126  //bool uninitialize_vla_p; // redundant with to_initialize
127 
128  // don't forget to free ref in to_initialize
129  list /*reference*/ to_initialize;
130  entity init_value;
131 } ctx_initvla_t;
132 
133 
134 /**
135  * /param ctx context that notably keep the variable to initialize
136  * /param dep_ref reference of the variable length that need to be initialize
137  * /param decl the intialization of vla that make problem
138  * /param message to print a custom warning/error message
139  * /param need_initialize_p, if the vla use a negative variable length value, the variable in himself don't be to be initialize
140  * but we can still want the warning/error to prevent of a wrong intialization
141  */
142 static void add_dependence_reference(ctx_initvla_t *ctx, reference dep_ref, entity decl, string message, bool need_initialize_p) {
143  //ctx->uninitialize_vla_p = true;
144  if (need_initialize_p) {
146  pips_debug(2, "variable %s is added to the list of variable to initialize.\n", reference_to_string(dep_ref));
147  ctx->to_initialize = CONS(REFERENCE, dep_ref, ctx->to_initialize);
148  }
149  else
150  free_reference(dep_ref);
151  }
152  else
153  free_reference(dep_ref);
154 
155  if (ctx->warning_on_uninitialize_p) {
156  pips_user_warning("%s declaration of %s depend of %s\n",
157  message, entity_user_name(decl), reference_to_string(dep_ref));
158  }
159  if (ctx->error_on_uninitialize_p) {
160  pips_user_error("%s declaration of %s depend of %s\n",
161  message, entity_user_name(decl), reference_to_string(dep_ref));
162  }
163 }
164 
165 /**
166  * search uninitialized variable length in vla declaration
167  */
168 static void statement_check_initialize_vla_with_preconditions(statement s, ctx_initvla_t *ctx) {
169  // only declaration is interesting
170  if (declaration_statement_p(s)) {
171  ifdebug(2) {
172  pips_debug(2, "declaration statement to analyze:\n");
173  print_statement(s);
174  }
175 
176  list ldecl = statement_declarations(s);
177 
179  //list precarg = transformer_arguments(prec);
181 
182  FOREACH(ENTITY, decl, ldecl) {
183  type t = entity_type(decl);
184  // no need to test if the entity is a variable (entity_variable_p)
185  // or has dependent type (dependent_type_p)
186  // because dependence_of_dependent_type also do it.
187  list /*reference*/ ldep = dependence_of_dependent_type(t); // list of vla declaration
188 
189  ifdebug(2) {
190  pips_debug(2, "list of dependence for entity %s: ", entity_name(decl));
191  print_references(ldep);
192  }
193 
194  // foreach variable length (of vla declaration) check if it is initialize
195  FOREACH(REFERENCE, dep_ref, ldep) {
196  entity dep_var = reference_variable(dep_ref);
197  list dep_arg = reference_indices(dep_ref);
198  entity dep_ent = entity_undefined;
199 
200  // in case of int a[b[0]];
201  // b[0] need to be convert as an entity SEMANTICS_ANALYZE_CONSTANT_PATH?
202  // as in precondition?
203  if (!ENDP(dep_arg)) {
204  //reference indices isn't NIL
205  if (ctx->semantics_analyze_constant_path_p) {
206  //convert reference to entity like precondition does it?
207  pips_internal_error("management of semantics_analyze_constant_path, not implemented yet.\n");
208  dep_ent = dep_var;
209  }
210  else {
211  // variable present in precondition system are only compose of entity and not reference
212  add_dependence_reference(ctx, dep_ref, decl,
213  "Detection of a dependence with an array that can't be analyze.\n"
214  "Try to set SEMANTICS_ANALYZE_CONSTANT_PATH at true.\n",
215  true);
216  }
217  }
218  else {
219  //reference indices is NIL
220  dep_ent = dep_var;
221  }
222 
223  // we know the entity variable length (dep_ent) to check the initialization and the value.
224  if (!entity_undefined_p(dep_ent)) {
225  long long int min, max;
226  if (sc_minmax_of_variable(sc_copy(precsc), dep_ent, &min, &max)) {
227  if (max == VALUE_MAX && min == VALUE_MIN) {
228  // dep_ent is uninitialized
229  string mess;
230  asprintf(&mess, "%s can be uninitialized when", entity_user_name(dep_ent));
231  add_dependence_reference(ctx, dep_ref, decl, mess, true);
232  }
233  else if (min < 0) {
234  // dep_ent is negative
235  string mess;
236  asprintf(&mess, "wrong declaration of array %s with %s<0\n", entity_user_name(decl), entity_user_name(dep_ent));
237  add_dependence_reference(ctx, dep_ref, decl, mess, false);
238  }
239  else {
240  //no memory leak, in the other case, it's add_dependence_reference which manage free or not dep_ref
241  free_reference(dep_ref);
242  }
243  }
244  else {
245  pips_user_error("This case must never happen.\n It mean the precondition system is unconsistent?\n");
246  //string mess;
247  //asprintf(&mess, "%s can be uninitialize when", entity_user_name(dep_ent));
248  //add_dependence_reference(ctx, dep_ref, decl, mess, true);
249  }
250  }
251  }
252 
253  gen_free_list(ldep);
254  ldep=NIL;
255  }
256  }
257 }
258 
259 /**
260  * static function due to ctx_initvla_t argument
261  */
262 static bool check_initialize_vla_with_preconditions_on_statement(statement module_statement, ctx_initvla_t * ctx) {
264  statement_domain, gen_true2, statement_check_initialize_vla_with_preconditions);
265 
266  return true;
267 }
268 
269 static bool check_initialize_vla_generic(const char* module_name, bool with_preconditions_p, bool with_efects_p, bool with_regions_p) {
270  //entity module;
272  bool good_result_p = false;
273 
274  pips_assert("with_preconditions_p or with_efects_p or with_regions_p must be true.\n",
275  with_preconditions_p || with_efects_p || with_regions_p);
276 
277  debug_on("INITIALIZE_VLA_DEBUG_LEVEL");
278  pips_debug(1, "begin\n");
279 
280  //-- configure environment --//
282  //module = get_current_module_entity();
283 
285  db_get_memory_resource(DBR_CODE, module_name, true) );
287 
288  pips_assert("Statement should be OK before...",
290 
291 
292  //-- get dependencies --//
293  if (with_preconditions_p) {
295  db_get_memory_resource(DBR_PRECONDITIONS, module_name, true) );
296  }
297 // if (with_regions_p) {
298 // set_cumulated_rw_effects( (statement_effects)
299 // db_get_memory_resource(DBR_XXX, module_name, true) );
300 // }
301 // else if (with_efects_p) {
302 // set_cumulated_rw_effects((statement_effects)
303 // db_get_memory_resource(DBR_XXX, module_name, true));
304 // }
305 
306 
307  //-- Init Context --//
308  ctx_initvla_t ctx;
309  //ctx.uninitialize_vla_p = false;
310  ctx.to_initialize = NIL;
311  ctx.warning_on_uninitialize_p = !get_bool_property("ERROR_ON_UNINITIALIZE_VLA");
312  ctx.error_on_uninitialize_p = get_bool_property("ERROR_ON_UNINITIALIZE_VLA");
313  ctx.semantics_analyze_constant_path_p = get_bool_property("SEMANTICS_ANALYZE_CONSTANT_PATH");
314  //ctx.init_value = get_int_property("INITIALIZE_VLA_VALUE"); //not use for the check
315 
316 
317  //-- Make the job -- //
318  if (with_preconditions_p) {
319  good_result_p = check_initialize_vla_with_preconditions_on_statement(module_statement, &ctx);
320  }
321 
322 
323  //-- Save modified code to database --//
325 
328  if (with_preconditions_p) {
330  }
331 // if (with_efects_p || with_regions_p) {
332 // reset_cumulated_rw_effects();
333 // }
334 
335  pips_debug(1, "end\n");
336  debug_off();
337 
338  return (good_result_p);
339 }
340 
341 /**
342  * PIPS pass
343  */
345  return check_initialize_vla_generic(module_name, true, false, false);
346 }
347 
348 /**
349  * PIPS pass
350  */
352  pips_internal_error("check_initialize_vla_with_effects(%s) "
353  "Not implemented yet.\n", module_name);
354  return false;
355 // return check_initialize_vla_generic(module_name, false, true, false);
356 }
357 
358 /**
359  * PIPS pass
360  */
362  pips_internal_error("check_initialize_vla_with_regions(%s) "
363  "Not implemented yet.\n", module_name);
364  return false;
365 // return check_initialize_vla_generic(module_name, false, false, true);
366 }
367 
368 /******************************************************
369  * CHECK : END *
370  ******************************************************/
371 
372 //static bool statement_initialize_vla(statement s, ctx_initvla_t *ctx) {
373 // // only declaration is interesting
374 // if (declaration_statement_p(s)) {
375 // ifdebug(5) {
376 // pips_debug(5, "declaration statement to analyze:\n");
377 // print_statement(s);
378 // }
379 //
380 // list ldecl = statement_declarations(s);
381 //
382 // FOREACH(REFERENCE, ref, ctx->to_initialize) {
383 // if (!gen_chunk_undefined_p(gen_find_eq(reference_variable(ref), ldecl))) {
384 //
385 // }
386 // }
387 // FOREACH(ENTITY, decl, ldecl) {
388 // if (!gen_chunk_undefined_p(gen_find(decl, ctx->to_initialize, gen_eq, reference_variable))) {
389 //
390 // }
391 // }
392 //
393 // //No more variable length to initialize
394 // if (ENDP(ctx->to_initialize)) {
395 // pips_debug(5, "No more variable to initialize.\n");
396 // gen_recurse_stop();
397 // }
398 // }
399 // return true;
400 //}
401 
402 /**
403  * static function due to ctx_initvla_t argument
404  * add an initial value for scalar variables in variable in ctx->to_initialize
405  * add an affectation statement for cell array variable in ctx->to_initialize
406  */
407 static bool initialize_vla_on_statement(statement module_statement __attribute__((unused)), ctx_initvla_t * ctx) {
408  pips_debug(1, "begin\n");
409  entity init_value = ctx->init_value;
410  list l = gen_copy_seq(ctx->to_initialize);
411 
412  // treat scalar variables
413  FOREACH(REFERENCE, ref, l) {
415  list ind = reference_indices(ref);
416  if (ENDP(ind)) {
417  value val = entity_initial(var);
418  if (value_unknown_p(val)) {
420  free_value(val);
421  gen_remove(&(ctx->to_initialize), ref);
423  }
424  else {
425  pips_internal_error("This case never happen.\n");
426  }
427  }
428  }
429  gen_free_list(l);
430 
431  // treat array variables
432  if (!ENDP(ctx->to_initialize)) {
433  // add affectation statement for cell array just after the declaration of the array
434  // (the cell array to set is a length for the declaration of a vla)
435  // gen_context_recurse(module_statement, ctx,
436  // statement_domain, statement_initialize_vla, gen_null);
437  }
438 
439  // still some variable uninitialized? as pointer?
440  if (!ENDP(ctx->to_initialize)) {
441  pips_user_warning("Some variables length are still uninitialized:\n");
442  FOREACH(REFERENCE, ref, ctx->to_initialize) {
443  pips_user_warning("%s is uninitialized.\n", reference_to_string(ref));
444  }
445  }
446  pips_debug(1, "end\n");
447  return true;
448 }
449 
450 static bool initialize_vla_generic(const char* module_name, bool with_preconditions_p, bool with_efects_p, bool with_regions_p) {
451  //entity module;
453  bool good_result_p = false;
454 
455  pips_assert("with_preconditions_p or with_efects_p or with_regions_p must be true.\n",
456  with_preconditions_p || with_efects_p || with_regions_p);
457 
458  debug_on("INITIALIZE_VLA_DEBUG_LEVEL");
459  pips_debug(1, "begin\n");
460 
461  //-- configure environment --//
463  //module = get_current_module_entity();
464 
466  db_get_memory_resource(DBR_CODE, module_name, true) );
468 
469  pips_assert("Statement should be OK before...",
471 
473 
474 
475  //-- get dependencies --//
476  if (with_preconditions_p) {
478  db_get_memory_resource(DBR_PRECONDITIONS, module_name, true) );
479  }
480 // if (with_regions_p) {
481 // set_cumulated_rw_effects( (statement_effects)
482 // db_get_memory_resource(DBR_XXX, module_name, true) );
483 // }
484 // else if (with_efects_p) {
485 // set_cumulated_rw_effects((statement_effects)
486 // db_get_memory_resource(DBR_XXX, module_name, true));
487 // }
488 
489 
490  //-- Init Context --//
491  ctx_initvla_t ctx;
492  //ctx.uninitialize_vla_p = false;
493  ctx.to_initialize = NIL;
494  ctx.warning_on_uninitialize_p = false; //don't want warning or error
495  ctx.error_on_uninitialize_p = false; //don't want warning or error
496  ctx.semantics_analyze_constant_path_p = get_bool_property("SEMANTICS_ANALYZE_CONSTANT_PATH");
497  int init_val = get_int_property("INITIALIZE_VLA_VALUE");
498  ctx.init_value = make_integer_constant_entity(init_val);
499  //ctx.init_value = int_to_entity(init_val);
500 
501 
502  //-- Make the job -- //
503  // search the uninitialized variable length of vla
504  if (with_preconditions_p) {
505  check_initialize_vla_with_preconditions_on_statement(module_statement, &ctx);
506  }
507 
508  // make the initialization (if there is something to initialize)
509  if (ctx.to_initialize != NIL) {
510  good_result_p = initialize_vla_on_statement(module_statement, &ctx);
511  }
512 
513 
514  pips_assert("Statement should be OK after...",
516 
517 
518  //-- Save modified code to database --//
520 
524  if (with_preconditions_p) {
526  }
527 // if (with_efects_p || with_regions_p) {
528 // reset_cumulated_rw_effects();
529 // }
530 
531  pips_debug(1, "end\n");
532  debug_off();
533 
534  return (good_result_p);
535 }
536 
537 /**
538  * PIPS pass
539  */
541  return initialize_vla_generic(module_name, true, false, false);
542 }
543 
544 /**
545  * PIPS pass
546  */
547 bool initialize_vla_with_effects(const char* module_name) {
548  pips_internal_error("initialize_vla_with_effects(%s) "
549  "Not implemented yet.\n", module_name);
550  return false;
551 // return initialize_vla_generic(module_name, false, true, false);
552 }
553 
554 /**
555  * PIPS pass
556  */
557 bool initialize_vla_with_regions(const char* module_name) {
558  pips_internal_error("initialize_vla_with_regions(%s)"
559  " Not implemented yet.\n", module_name);
560  return false;
561 // return initialize_vla_generic(module_name, false, false, true);
562 }
563 
564 #endif // BUILDER_*INITIALIZE_VLA_WITH*
float a2sf[2] __attribute__((aligned(16)))
USER generates a user error (i.e., non fatal) by printing the given MSG according to the FMT.
Definition: 3dnow.h:3
int get_int_property(const string)
value make_value_expression(expression _field_)
Definition: ri.c:2850
void free_reference(reference p)
Definition: ri.c:2050
bool statement_consistent_p(statement p)
Definition: ri.c:2195
void free_value(value p)
Definition: ri.c:2787
static reference ref
Current stmt (an integer)
Definition: adg_read_paf.c:163
static statement module_statement
Definition: alias_check.c:125
#define VALUE_MIN
#define VALUE_MAX
#define min(a, b)
#define max(a, b)
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....
#define gen_chunk_undefined_p(c)
Definition: genC.h:75
#define gen_context_recurse(start, ctxt, domain_number, flt, rwt)
Definition: genC.h:285
void reset_current_module_entity(void)
Reset the current module entity.
Definition: static.c:97
void reset_current_module_statement(void)
Reset the current module statement.
Definition: static.c:221
statement set_current_module_statement(statement)
Set the current module statement.
Definition: static.c:165
statement get_current_module_statement(void)
Get the current module statement.
Definition: static.c:208
entity set_current_module_entity(entity)
static.c
Definition: static.c:66
void * gen_chunk_identity(gen_chunk x)
Definition: genClib.c:2812
bool gen_true2(__attribute__((unused)) gen_chunk *u1, __attribute__((unused)) void *u2)
Definition: genClib.c:2785
#define ENDP(l)
Test if a list is empty.
Definition: newgen_list.h:66
void gen_remove(list *cpp, const void *o)
remove all occurences of item o from list *cpp, which is thus modified.
Definition: list.c:685
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
list gen_copy_seq(list l)
Copy a list structure.
Definition: list.c:501
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
void gen_free_list(list l)
free the spine of the list
Definition: list.c:327
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
Definition: newgen_list.h:179
void * gen_find(const void *item, const list seq, gen_filter2_func_t test, gen_extract_func_t extract)
Definition: list.c:398
string db_get_memory_resource(const char *rname, const char *oname, bool pure)
Return the pointer to the resource, whatever it is.
Definition: database.c:755
#define DB_PUT_MEMORY_RESOURCE(res_name, own_name, res_val)
conform to old interface.
Definition: pipsdbm-local.h:66
bool declaration_statement_p(statement)
Had to be optimized according to Beatrice Creusillet.
Definition: statement.c:224
#define debug_on(env)
Definition: misc-local.h:157
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define pips_user_warning
Definition: misc-local.h:146
#define asprintf
Definition: misc-local.h:225
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
Definition: misc-local.h:172
#define pips_internal_error
Definition: misc-local.h:149
#define debug_off()
Definition: misc-local.h:160
#define pips_user_error
Definition: misc-local.h:147
bool(* gen_filter2_func_t)(const void *, const void *)
Definition: newgen_types.h:110
hash_table set_ordering_to_statement(statement s)
To be used instead of initialize_ordering_to_statement() to make sure that the hash table ots is in s...
Definition: ordering.c:172
void reset_ordering_to_statement(void)
Reset the mapping from ordering to statement.
Definition: ordering.c:185
void print_references(list rl)
Definition: expression.c:163
string reference_to_string(reference r)
Definition: expression.c:87
void print_statement(statement)
Print a statement on stderr.
Definition: statement.c:98
const char * entity_user_name(entity e)
Since entity_local_name may contain PIPS special characters such as prefixes (label,...
Definition: entity.c:487
entity module_name_to_entity(const char *mn)
This is an alias for local_name_to_top_level_entity.
Definition: entity.c:1479
expression entity_to_expression(entity e)
if v is a constant, returns a constant call.
Definition: expression.c:165
bool reference_equal_p(reference r1, reference r2)
Definition: expression.c:1500
list dependence_of_dependent_type(type)
similar to dependent_type_p but return a list of reference on which the type depend.
Definition: type.c:5942
entity make_integer_constant_entity(_int)
entity make_integer_constant_entity(int c) make entity for integer constant c
Definition: variable.c:1345
#define REFERENCE(x)
REFERENCE.
Definition: ri.h:2296
#define reference_variable(x)
Definition: ri.h:2326
#define ENTITY(x)
ENTITY.
Definition: ri.h:2755
#define value_unknown_p(x)
Definition: ri.h:3077
#define statement_domain
newgen_sizeofexpression_domain_defined
Definition: ri.h:362
#define entity_undefined_p(x)
Definition: ri.h:2762
#define entity_undefined
Definition: ri.h:2761
#define entity_name(x)
Definition: ri.h:2790
#define transformer_relation(x)
Definition: ri.h:2873
#define reference_indices(x)
Definition: ri.h:2328
#define statement_declarations(x)
Definition: ri.h:2460
#define entity_type(x)
Definition: ri.h:2792
#define predicate_system(x)
Definition: ri.h:2069
#define entity_initial(x)
Definition: ri.h:2796
Psysteme sc_copy(Psysteme ps)
Psysteme sc_copy(Psysteme ps): duplication d'un systeme (allocation et copie complete des champs sans...
Definition: sc_alloc.c:230
bool sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, Value *pmax)
void sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, *pmax): examine un systeme pour tr...
Definition: sc_eval.c:143
char * strdup()
transformer load_statement_precondition(statement)
void reset_precondition_map(void)
void set_precondition_map(statement_mapping)
#define ifdebug(n)
Definition: sg.c:47
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
bool initialize_vla_with_effects(const char *)
bool initialize_vla_with_regions(const char *)
bool check_initialize_vla_with_regions(const string)
bool check_initialize_vla_with_preconditions(const string)
initialized_vla.c
bool initialize_vla_with_preconditions(const char *)
bool check_initialize_vla_with_effects(const string)