Leopold Toetsch sent the following bits through the ether: > Could you try my second proposal?
Sure. The patch I tried is attached, which fixes up a lot of the warnings. However, I now get: cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o imcparser.o -c imcparser.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o imclexer.o -c imclexer.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o imc.o -c imc.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o stacks.o -c stacks.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o symreg.o -c symreg.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o instructions.o -c instructions.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o cfg.o -c cfg.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o sets.o -c sets.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o debug.o -c debug.c cc -pipe -fno-common -no-cpp-precomp -fno-strict-aliasing -pipe -fno-common -g-I../../include -o anyop.o -c anyop.c cc -o imcc imcparser.o imclexer.o imc.o stacks.o symreg.o instructions.o cfg.osets.o debug.o anyop.o ../../platform.o -lm ld: multiple definitions of symbol _n_spilled imcparser.o definition of _n_spilled in section (__DATA,__common) imc.o definition of _n_spilled in section (__DATA,__common) make: *** [imcc] Error 1 If only I knew more C / linker foo... Cheers, Leon -- Leon Brocard.............................http://www.astray.com/ scribot.................................http://www.scribot.com/ .... According to my calculations the problem doesn't exist
Index: cfg.h =================================================================== RCS file: /cvs/public/parrot/languages/imcc/cfg.h,v retrieving revision 1.4 diff -u -r1.4 cfg.h --- cfg.h 27 Aug 2002 06:48:44 -0000 1.4 +++ cfg.h 12 Sep 2002 08:53:47 -0000 @@ -1,6 +1,12 @@ /* Data structures: */ +#ifdef MAIN +#define EXTERN +#else +#define EXTERN extern +#endif + /* Two-way linked list of predecessors and successors */ typedef struct _edge { struct _basic_block *from; @@ -22,9 +28,9 @@ } Basic_block; /* Globals: */ -Basic_block **bb_list; -int n_basic_blocks; -Set** dominators; +EXTERN Basic_block **bb_list; +EXTERN int n_basic_blocks; +EXTERN Set** dominators; /* Functions: */ Index: imc.h =================================================================== RCS file: /cvs/public/parrot/languages/imcc/imc.h,v retrieving revision 1.12 diff -u -r1.12 imc.h --- imc.h 27 Aug 2002 06:48:44 -0000 1.12 +++ imc.h 12 Sep 2002 08:53:47 -0000 @@ -13,6 +13,12 @@ # define EX_UNAVAILABLE 1 #endif +#ifdef MAIN +#define EXTERN +#else +#define EXTERN extern +#endif + #include "symreg.h" #include "instructions.h" #include "sets.h" @@ -47,11 +53,11 @@ char *str_dup(const char *); char *str_cat(const char *, const char *); -int IMCC_DEBUG; -int IMCC_LIFE_INFO; -int IMCC_VERBOSE; -int n_spilled; -SymReg** interference_graph; +EXTERN int IMCC_DEBUG; +EXTERN int IMCC_LIFE_INFO; +EXTERN int IMCC_VERBOSE; +EXTERN int n_spilled; +EXTERN SymReg** interference_graph; Index: imcc.y =================================================================== RCS file: /cvs/public/parrot/languages/imcc/imcc.y,v retrieving revision 1.21 diff -u -r1.21 imcc.y --- imcc.y 6 Sep 2002 07:13:52 -0000 1.21 +++ imcc.y 12 Sep 2002 08:53:47 -0000 @@ -13,8 +13,10 @@ #include <stdio.h> #include <stdlib.h> #include <assert.h> -#include "imc.h" #include "anyop.h" + +#define MAIN +#include "imc.h" #define YYDEBUG 1 Index: instructions.h =================================================================== RCS file: /cvs/public/parrot/languages/imcc/instructions.h,v retrieving revision 1.6 diff -u -r1.6 instructions.h --- instructions.h 27 Aug 2002 06:48:44 -0000 1.6 +++ instructions.h 12 Sep 2002 08:53:47 -0000 @@ -1,3 +1,8 @@ +#ifdef MAIN +#define EXTERN +#else +#define EXTERN extern +#endif /* Types */ @@ -58,5 +63,5 @@ /* Globals */ -Instruction* instructions; +EXTERN Instruction* instructions; Index: symreg.h =================================================================== RCS file: /cvs/public/parrot/languages/imcc/symreg.h,v retrieving revision 1.4 diff -u -r1.4 symreg.h --- symreg.h 27 Aug 2002 06:48:44 -0000 1.4 +++ symreg.h 12 Sep 2002 08:53:47 -0000 @@ -1,3 +1,8 @@ +#ifdef MAIN +#define EXTERN +#else +#define EXTERN extern +#endif /* constants */ @@ -61,5 +66,5 @@ /* globals */ -SymReg * hash[HASH_SIZE]; -int n_symbols; +EXTERN SymReg * hash[HASH_SIZE]; +EXTERN int n_symbols;