PIPS
print.c
Go to the documentation of this file.
1 /*
2 
3  $Id: print.c 23065 2016-03-02 09:05:50Z coelho $
4 
5  Copyright 1989-2016 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 #ifdef HAVE_CONFIG_H
25  #include "pips_config.h"
26 #endif
27 
28 /* Name : print.c
29  * Package : paf-util
30  * Author : Alexis Platonoff
31  * Date : july 1993
32  *
33  * Historic :
34  * - 16 july 93, changes in paf_ri, AP
35  * - 23 sept 93, change the name of this file, AP
36  * - 17 nov 93, add of fprintf_indent() for a prettier imprime_quast(). AP
37  *
38  * Documents:
39  * Comments : This file contains the functions used for printing the data
40  * structures of paf_ri.
41  */
42 
43 /* Ansi includes */
44 #include <stdio.h>
45 
46 /* Newgen includes */
47 #include "genC.h"
48 
49 /* C3 includes */
50 #include "boolean.h"
51 #include "arithmetique.h"
52 #include "vecteur.h"
53 #include "contrainte.h"
54 #include "ray_dte.h"
55 #include "sommet.h"
56 #include "sg.h"
57 #include "sc.h"
58 #include "polyedre.h"
59 #include "matrice.h"
60 #include "matrix.h"
61 
62 /* Pips includes */
63 #include "linear.h"
64 #include "ri.h"
65 #include "ri-util.h"
66 #include "workspace-util.h" // for fprint_list_of_exp() [~print_expressions()]
67 #include "prettyprint.h"
68 #include "constants.h"
69 #include "misc.h"
70 #include "paf_ri.h"
73 #include "graph.h"
74 #include "text.h"
75 #include "text-util.h"
76 #include "misc.h"
77 #include "paf-util.h"
78 
79 /* Macro functions */
80 #define IS_INEG 0
81 #define IS_EG 1
82 #define IS_VEC 2
83 
84 /* Global variables */
85 
86 /* Internal variables */
87 static int quast_depth = 0; /* Used in imprime_quast() for correct indentation */
88 
89 /* Local defines */
90 /* Moved higher because of Newgen's static typing */
91 /*
92 typedef dfg_vertex_label vertex_label;
93 typedef dfg_arc_label arc_label;
94 */
95 
96 /*============================================================================*/
97 /* static void pu_contrainte_fprint(FILE *fp, Pcontrainte c, int is_what,
98  * char *(*variable_name)()):
99  *
100  * prints in the file "fp" the constraint "c", of type equality, inequality or
101  * vector according to the value of the integer argument "is_what", using the
102  * function "variable_name" for the name of the variables.
103  *
104  * The function contrainte_fprint() exists, it is defined in contrainte.c (C3
105  * library). We redefine this function because:
106  *
107  * 1. we want the constant term in the left hand side
108  * 2. we want a third type of contrainte (vector) which does not print the
109  * inequality or equality symbol.
110  * 3. we do not want a line feed at the end of the constraint
111  *
112  * We consider that CONTRAINTE_UNDEFINED => CONTRAINTE_NULLE
113  *
114  * Results for a constraint containing the following Pvecteur (2*I) (-J) (-4):
115  *
116  * equality: 2 * I - J - 4 = 0
117  * inequality: 2 * I - J - 4 <= 0
118  * vector: 2 * I - J - 4
119  *
120  */
121 /* GRRRR this function is already/also in array_dfg... FC */
122 
124  FILE *fp,
125  Pcontrainte c,
126  int is_what,
127  const char * (*variable_name)(entity))
128 {
129  Pvecteur v;
130  short int debut = 1;
131  Value constante = VALUE_ZERO;
132 
133  if (!CONTRAINTE_UNDEFINED_P(c))
134  v = contrainte_vecteur(c);
135  else
136  v = VECTEUR_NUL;
137 
138  if(!vect_check(v))
139  pips_internal_error("Non coherent vector");
140 
141  while (!VECTEUR_NUL_P(v)) {
142  if (v->var!=TCST) {
143  char signe;
144  Value coeff = v->val;
145 
146  if (value_notzero_p(coeff)) {
147  if (value_pos_p(coeff))
148  signe = (debut) ? ' ' : '+';
149  else {
150  signe = '-';
151  value_oppose(coeff);
152  };
153  debut = 0;
154  if (value_one_p(coeff))
155  (void) fprintf(fp,"%c %s ", signe, variable_name(v->var));
156  else
157  {
158  (void) fprintf(fp,"%c ", signe);
159  fprint_Value(fp, coeff);
160  fprintf(fp, " %s ", variable_name(v->var));
161  }
162  }
163  }
164  else /* on admet plusieurs occurences du terme constant!?! */
165  value_addto(constante, v->val);
166 
167  v = v->succ;
168  }
169 
170  /* sign */
171  if (value_pos_p(constante))
172  fprintf(fp, "+ ");
173  else if (value_neg_p(constante))
174  value_oppose(constante), fprintf(fp, "- ");
175 
176  /* value */
177  if (value_notzero_p(constante))
178  fprint_Value(fp, constante), fprintf(fp, " ");
179 
180  /* trail */
181  if (is_what == IS_INEG)
182  fprintf (fp,"<= 0 ,");
183  else if(is_what == IS_EG)
184  fprintf (fp,"== 0 ,");
185  else /* IS_VEC */
186  fprintf (fp," ,");
187 }
188 
189 /*============================================================================*/
190 /* void pu_inegalite_fprint(FILE *fp, Pcontraint ineg,
191  * char *(*variable_name)()):
192  * Redefinition of inegalite_fprint(). See pu_contrainte_fprint() for details.
193  */
194 void pu_inegalite_fprint(FILE *fp,
195  Pcontrainte ineg,
196  const char * (*variable_name)(entity))
197 {
199 }
200 
201 /*============================================================================*/
202 /* void pu_egalite_fprint(FILE *fp, Pcontraint eg, char *(*variable_name)()):
203  * Redefinition of egalite_fprint(). See pu_contrainte_fprint() for details.
204  */
205 void pu_egalite_fprint(FILE *fp,
206  Pcontrainte eg,
207  const char * (*variable_name)(entity))
208 {
210 }
211 
212 /*============================================================================*/
213 /* void vecteur_fprint(FILE *fp, Pcontraint vec char *(*variable_name)()):
214  * See pu_contrainte_fprint() for details.
215  */
216 void vecteur_fprint(FILE *fp,
217  Pcontrainte vec,
218  const char * (*variable_name)(entity))
219 {
221 }
222 
223 /*============================================================================*/
224 /* void fprint_dataflow(FILE *fp, int stmt, dataflow df)
225  *
226  * Prints in the file "fp" the dataflow "df" with a sink statement "stmt".
227  *
228  */
229 void fprint_dataflow(fp, stmt, df)
230 FILE *fp;
231 int stmt;
232 dataflow df;
233 {
238 
239  fprintf(fp,
240  " ---Def-Use---> ins_%d:\n Reference: %s\n Transformation: [",
242 
244  fprintf(fp,"]\n");
245  fprintf(fp," Governing predicate:\n");
247  fprint_pred(fp, gov_pred);
248  else
249  fprintf(fp, " {nil} \n");
250 
251  if(comm == communication_undefined)
252  {
253  /*fprintf(fp, "\t\t Communication general \n");*/
254  }
255  else
256  {
257  predicate pred;
258 
259  pred = communication_broadcast(comm);
260  if(pred != predicate_undefined)
261  {
262  fprintf(fp,"\t\t Broadcast vector(s):");
264  }
265 
266  pred = communication_reduction(comm);
267  if(pred != predicate_undefined)
268  {
269  fprintf(fp,"\t\t Reduction vector(s):");
271  }
272 
273  pred = communication_shift(comm);
274  if(pred != predicate_undefined)
275  {
276  fprintf(fp,"\t\t Shift vector(s):");
278  }
279  }
280 }
281 
282 
283 /*============================================================================*/
284 /* void fprint_pred(FILE *fp, predicate pred): prints in the file "fp" the
285  * predicate "pred".
286  */
287 void fprint_pred(fp, pred)
288 FILE *fp;
289 predicate pred;
290 {
291  Psysteme ps = (Psysteme) predicate_system(pred);
292 
293  fprint_psysteme(fp, ps);
294 }
295 
296 /*============================================================================*/
297 /* void fprint_psysteme(FILE *fp, Psysteme ps): prints in the file "fp" the
298  * Psysteme "ps". Each constraint is printed either with pu_inegalite_fprint()
299  * or pu_egalite_fprint(), both redefined above. See pu_contrainte_fprint()
300  * for details.
301  */
302 void fprint_psysteme(fp, ps)
303 FILE *fp;
304 Psysteme ps;
305 {
306  Pcontrainte peq;
307 
308  if (ps != NULL) {
309  fprintf(fp,"{\n");
310  for (peq = ps->inegalites; peq!=NULL; peq=peq->succ) {
312  fprintf(fp, "\n");
313  }
314  for (peq = ps->egalites; peq!=NULL; peq=peq->succ) {
316  fprintf(fp, "\n");
317  }
318  fprintf(fp,"} \n");
319  }
320  else
321  fprintf(fp," { nil }\n");
322 }
323 
324 /*============================================================================*/
325 /* void fprint_sc_pvecteur(FILE *fp, Psysteme ps): prints in the file "fp"
326  * the Psysteme "ps" as a list of vectors. Each constraint is printed with
327  * vecteur_fprint() defined above. See pu_contrainte_fprint() for details.
328  */
329 void fprint_sc_pvecteur(fp, ps)
330 FILE *fp;
331 Psysteme ps;
332 {
333  Pcontrainte peq;
334 
335  if (ps != NULL) {
336  fprintf(fp,"{ ");
337 
338  for (peq = ps->inegalites; peq!=NULL;
339  vecteur_fprint(fp,peq,entity_local_name),peq=peq->succ);
340 
341  for (peq = ps->egalites; peq!=NULL;
342  vecteur_fprint(fp,peq,entity_local_name),peq=peq->succ);
343 
344  fprintf(fp," } \n");
345  }
346  else
347  fprintf(fp,"(nil)\n");
348 }
349 
350 
351 /*============================================================================*/
352 void fprint_bdt(fp, obj)
353 FILE *fp;
354 bdt obj;
355 {
356  list sched_l;
357 
358  fprintf(fp,"\n Scheduling:\n");
359  fprintf(fp,"============\n");
360 
361  if(obj == bdt_undefined) {
362  fprintf(fp, "\tNot computed\n\n");
363  return;
364  }
365 
366  sched_l = bdt_schedules(obj);
367 
368  for(; sched_l != NIL; sched_l = CDR(sched_l)) {
369  schedule crt_sched;
370  int crt_stmt;
371  list dim_l;
372  predicate crt_pred;
373 
374  crt_sched = SCHEDULE(CAR(sched_l));
375  crt_stmt = schedule_statement(crt_sched);
376  dim_l = schedule_dims(crt_sched);
377  crt_pred = schedule_predicate(crt_sched);
378 
379  /* PRINT */
380  /* Mod by AP, oct 6th 199595: the number of the instruction is the
381  vertex number minus BASE_NODE_NUMBER. */
382  fprintf(fp,"ins_%d:\n", crt_stmt-BASE_NODE_NUMBER);
383 
384  if(crt_pred != predicate_undefined) {
385  Psysteme ps = (Psysteme) predicate_system(crt_pred);
386  Pcontrainte peq;
387 
388  if (ps != NULL) {
389  fprintf(fp,"\t pred: ");
390 
391  for (peq = ps->inegalites; peq!=NULL;
392  pu_inegalite_fprint(fp,peq,entity_local_name),peq=peq->succ);
393 
394  for (peq = ps->egalites; peq!=NULL;
395  pu_egalite_fprint(fp,peq,entity_local_name),peq=peq->succ);
396 
397  fprintf(fp,"\n");
398  }
399  else
400  fprintf(fp, "\t pred: TRUE\n");
401  }
402  else
403  fprintf(fp, "\t pred: TRUE\n");
404 
405  fprintf(fp, "\t dims: ");
406  for(; dim_l != NIL; dim_l = CDR(dim_l)) {
407  expression exp = EXPRESSION(CAR(dim_l));
408  fprintf(fp,"%s", expression_to_string(exp));
409  if(CDR(dim_l) != NIL)
410  fprintf(fp," , ");
411  }
412  fprintf(fp,"\n");
413  }
414 }
415 
416 
417  /* package mapping : Alexis Platonoff, april 1993*/
418 
419 
420 /*============================================================================*/
421 const char* pu_variable_name(v)
422 Variable v;
423 {
424  if(v == TCST)
425  return("TCST");
426  else
427  return(entity_local_name((entity) v));
428 }
429 
430 
431 /*============================================================================*/
433  Variable v2 __attribute__ ((unused)))
434 {
435  return(false);
436 }
437 
438 
439 /*============================================================================*/
440 /* void pu_vect_fprint(FILE *fp, Pvecteur v): impression d'un vecteur creux v
441  * sur le fichier fp.
442  *
443  * There exist a function "vect_fprint" in C3 which takes a third argument.
444  */
445 /* arg, also in array_dfg. */
446 void pu_vect_fprint(FILE * fp, Pvecteur v)
447 {
448  short int debut = 1;
449  Value constante = VALUE_ZERO;
450  char signe;
451  while (!VECTEUR_NUL_P(v)) {
452  if (v->var!=TCST) {
453  Value coeff = v->val;
454 
455  if (value_notzero_p(coeff)) {
456  if (value_pos_p(coeff))
457  signe = (debut) ? ' ' : '+';
458  else {
459  signe = '-';
460  value_oppose(coeff);
461  }
462  debut = 0;
463  if (value_one_p(coeff))
464  fprintf(fp,"%c %s ", signe,
466  else
467  {
468  fprintf(fp,"%c ", signe);
469  fprint_Value(fp, coeff);
470  fprintf(fp, " %s ", entity_local_name((entity) v->var));
471  }
472  }
473  }
474  else
475  /* on admet plusieurs occurences du terme constant!?! */
476  value_addto(constante, v->val);
477  v = v->succ;
478  }
479  if(debut)
480  fprint_Value(fp, constante);
481  else if(value_notzero_p(constante)) {
482  if(value_pos_p(constante))
483  signe = (debut) ? ' ' : '+';
484  else {
485  signe = '-';
486  value_oppose(constante);
487  }
488  (void) fprintf(fp,"%c ", signe);
489  fprint_Value(fp, constante);
490  fprintf(fp, "\n");
491  }
492  else
493  (void) fprintf(fp, "\n");
494 }
495 
496 
497 
498 
499 #define INDENT_FACTOR 2
500 
501 /*============================================================================*/
502 void fprint_indent(fp, indent)
503 FILE *fp;
504 int indent;
505 {
506  int i;
507 
508  fprintf(fp, "\n");
509  for(i = 0; i < (indent * INDENT_FACTOR); i++) fprintf(fp, " ");
510 }
511 
512 
513 /*============================================================================*/
514 void imprime_quast (fp, qu)
515 FILE *fp;
516 quast qu;
517 {
518  Psysteme paux = SC_UNDEFINED;
519  predicate pred_aux = predicate_undefined;
520  conditional cond_aux;
521  quast_value quv;
522  quast_leaf qul;
523  leaf_label ll;
524  list sol;
525 
526  if( (qu == quast_undefined) || (qu == NULL) ) {
528  fprintf(fp, "Empty Quast ");
529  return;
530  }
531  quv = quast_quast_value(qu);
532  if( quv == quast_value_undefined ) {
534  fprintf(fp, "Empty Quast ");
535  return;
536  }
537  quv = quast_quast_value(qu);
538 
539  switch( quast_value_tag(quv)) {
541  cond_aux = quast_value_conditional(quv);
542  pred_aux = conditional_predicate(cond_aux);
543  if (pred_aux != predicate_undefined)
544  paux = (Psysteme) predicate_system(pred_aux);
545 
547  fprintf(fp, "IF ");
548  fprint_psysteme(fp, paux);
549 
551  fprintf(fp, "THEN");
552  quast_depth++;
553  imprime_quast(fp, conditional_true_quast (cond_aux) );
554  quast_depth--;
555 
557  fprintf(fp, "ELSE");
558  quast_depth++;
559  imprime_quast(fp, conditional_false_quast (cond_aux) );
560  quast_depth--;
561 
563  fprintf(fp, "FI");
564  break;
565 
567  qul = quast_value_quast_leaf( quv );
568  if (qul == quast_leaf_undefined) {fprintf(fp,"Empty Quast Leaf\n");break;}
569  sol = quast_leaf_solution( qul );
570  ll = quast_leaf_leaf_label( qul );
571  if (ll != leaf_label_undefined) {
573  fprintf(fp, "Statement source number : %"PRIdPTR,
575 
577  fprintf(fp, "Depth : %"PRIdPTR, leaf_label_depth(ll));
578  }
580  while (sol != NIL) {
581  fprintf(fp, "%s, ", expression_to_string(EXPRESSION(CAR(sol))));
582  sol = CDR(sol);
583  }
584  break;
585  }
586 }
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
static list trans_l
Current list of nodes.
Definition: adg_read_paf.c:168
static int crt_stmt
Current source statement.
Definition: adg_read_paf.c:162
static reference ref
Current stmt (an integer)
Definition: adg_read_paf.c:163
static predicate gov_pred
Current expression.
Definition: adg_read_paf.c:165
#define value_pos_p(val)
#define VALUE_ZERO
#define value_oppose(ref)
#define value_notzero_p(val)
#define value_one_p(val)
int Value
#define value_addto(ref, val)
#define value_neg_p(val)
void fprint_Value(FILE *, Value)
Definition: io.c:42
#define CONTRAINTE_UNDEFINED_P(c)
#define contrainte_vecteur(c)
passage au champ vecteur d'une contrainte "a la Newgen"
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define CAR(pcons)
Get the value of the first element of a list.
Definition: newgen_list.h:92
#define CDR(pcons)
Get the list less its first element.
Definition: newgen_list.h:111
bool vect_check(Pvecteur cv)
bool vect_check(Pvecteur v): renvoie true si le vecteur v est coherent avec les specifications du pac...
Definition: reductions.c:529
#define pips_internal_error
Definition: misc-local.h:149
statement ordering_to_statement(int o)
Get the statement associated to a given ordering.
Definition: ordering.c:111
#define BASE_NODE_NUMBER
dfg_arc_label arc_label
Name : print.c Package : paf-util Author : Alexis Platonoff Date : july 1993.
Definition: print.c:71
void fprint_indent(FILE *fp, int indent)
===========================================================================
Definition: print.c:502
void vecteur_fprint(FILE *fp, Pcontrainte vec, const char *(*variable_name)(entity))
===========================================================================
Definition: print.c:216
void pu_vect_fprint(FILE *fp, Pvecteur v)
===========================================================================
Definition: print.c:446
static void pu_contrainte_fprint(FILE *fp, Pcontrainte c, int is_what, const char *(*variable_name)(entity))
Used in imprime_quast() for correct indentation.
Definition: print.c:123
static int quast_depth
Global variables
Definition: print.c:87
bool pu_is_inferior_var(Variable v1 __attribute__((unused)), Variable v2 __attribute__((unused)))
===========================================================================
Definition: print.c:432
dfg_vertex_label vertex_label
Definition: print.c:72
void pu_egalite_fprint(FILE *fp, Pcontrainte eg, const char *(*variable_name)(entity))
===========================================================================
Definition: print.c:205
void fprint_bdt(FILE *fp, bdt obj)
===========================================================================
Definition: print.c:352
void pu_inegalite_fprint(FILE *fp, Pcontrainte ineg, const char *(*variable_name)(entity))
===========================================================================
Definition: print.c:194
void fprint_sc_pvecteur(FILE *fp, Psysteme ps)
===========================================================================
Definition: print.c:329
void fprint_psysteme(FILE *fp, Psysteme ps)
===========================================================================
Definition: print.c:302
#define IS_EG
Definition: print.c:81
#define IS_INEG
Macro functions.
Definition: print.c:80
void fprint_pred(FILE *fp, predicate pred)
===========================================================================
Definition: print.c:287
void fprint_dataflow(FILE *fp, int stmt, dataflow df)
===========================================================================
Definition: print.c:229
#define IS_VEC
Definition: print.c:82
#define INDENT_FACTOR
Definition: print.c:499
void imprime_quast(FILE *fp, quast qu)
===========================================================================
Definition: print.c:514
const char * pu_variable_name(Variable v)
package mapping : Alexis Platonoff, april 1993
Definition: print.c:421
#define communication_shift(x)
Definition: paf_ri.h:265
#define conditional_true_quast(x)
Definition: paf_ri.h:302
#define dataflow_communication(x)
Definition: paf_ri.h:346
#define dataflow_transformation(x)
Definition: paf_ri.h:342
#define quast_undefined
Definition: paf_ri.h:603
#define quast_value_undefined
Definition: paf_ri.h:639
#define leaf_label_statement(x)
Definition: paf_ri.h:451
#define SCHEDULE(x)
SCHEDULE.
Definition: paf_ri.h:682
@ is_quast_value_quast_leaf
Definition: paf_ri.h:654
@ is_quast_value_conditional
Definition: paf_ri.h:655
#define conditional_false_quast(x)
Definition: paf_ri.h:304
#define communication_undefined
Definition: paf_ri.h:236
#define quast_leaf_solution(x)
Definition: paf_ri.h:591
#define quast_value_tag(x)
Definition: paf_ri.h:672
#define schedule_predicate(x)
Definition: paf_ri.h:715
#define dataflow_governing_pred(x)
Definition: paf_ri.h:344
#define bdt_schedules(x)
Definition: paf_ri.h:226
#define schedule_dims(x)
Definition: paf_ri.h:717
#define schedule_statement(x)
Definition: paf_ri.h:713
#define communication_reduction(x)
Definition: paf_ri.h:263
#define quast_leaf_undefined
Definition: paf_ri.h:567
#define leaf_label_undefined
Definition: paf_ri.h:427
#define dataflow_reference(x)
Definition: paf_ri.h:340
#define leaf_label_depth(x)
Definition: paf_ri.h:453
#define communication_broadcast(x)
Definition: paf_ri.h:261
#define quast_value_quast_leaf(x)
Definition: paf_ri.h:675
#define quast_leaf_leaf_label(x)
Definition: paf_ri.h:593
#define quast_quast_value(x)
Definition: paf_ri.h:627
#define conditional_predicate(x)
Definition: paf_ri.h:300
#define bdt_undefined
Definition: paf_ri.h:204
#define quast_value_conditional(x)
Definition: paf_ri.h:678
void fprint_list_of_exp(FILE *fp, list exp_l)
void fprint_list_of_exp(FILE *fp, list exp_l): prints in the file "fp" the list of expression "exp_l"...
Definition: expression.c:229
string reference_to_string(reference r)
Definition: expression.c:87
string expression_to_string(expression e)
Definition: expression.c:77
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
#define predicate_undefined
Definition: ri.h:2046
#define statement_number(x)
Definition: ri.h:2452
#define predicate_system(x)
Definition: ri.h:2069
struct Ssysteme * Psysteme
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
char * variable_name(Variable v)
polynome_ri.c
Definition: polynome_ri.c:73
struct Scontrainte * succ
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
Definition: statement.c:54
#define exp
Avoid some warnings from "gcc -Wshadow".
Definition: vasnprintf.c:207
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_NUL_P(v)
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60