From mboxrd@z Thu Jan 1 00:00:00 1970 To: 9fans@9fans.net Date: Thu, 10 Sep 2009 09:29:22 +0000 From: comeau@panix.com (Greg Comeau) Message-ID: References: <1d5d51400909090803n4c4d5b7ewba9dfe0573d02495@mail.gmail.com> Subject: Re: [9fans] porting help please (gcc void pointer handling) Topicbox-Message-UUID: 6c14dbe8-ead5-11e9-9d60-3106f5b1d025 In article <1d5d51400909090803n4c4d5b7ewba9dfe0573d02495@mail.gmail.com>, Fernan Bolando wrote: >On Wed, Sep 9, 2009 at 4:36 PM, Greg Comeau wrote: >> In article <1d5d51400909080844q1bee4c3s114ccc5e51ce52f5@mail.gmail.com>, >> Fernan Bolando wrote: >>>...error: initializer is not a constant: F0_Prelude_46primLeave >>>--h file --- >>>#define VAP_TAG =A01 >>>#define WORDSHIFT =A05 >>>#define WORDSIZE =A0 (1<>>#define WORDMASK =A0 (WORDSIZE-1) >>>#define NS =A0 =A0 =A0 =A0 (WORDSIZE>>3) >>>#define ZAP_BIT =A0 =A0(1L<<(WORDSIZE-1)) >>>-- c file ---- >>>unsigned F0_Prelude_46primLeave[] =3D { >>> =A0CAPTAG(FN_Prelude_46primLeave,1) >>>#ifdef PROFILE >>>, useLabel(PROF_primLeave) >>>, 0 >>>, 0 >>>, 0 >>>#endif >> >> The initializers to some things need to be constants. >> In your case, it appears that either CAPTAG or useLabel (or both) >> have ended up not being #define'd. =A0Probably the header they are >> #define'd in is not being #include'd (you don't show it above, >> but then you don't show enough of your code to even reproduce it). >> >> On a relate note, you can see the results of preprocessing >> from pcc by using the -E and/or -P options, that way you >> can see whether the macro ended up getting substituted >> and what it was substituted to -- or not in your case. >> Some compilers also have options which will emit the trail of >> files #include'd but I don't see that option for pcc. > >gcc happily compiles a definition like >#define CT_v249 ((void*)startLabel+464) > >is it valid just to add to make the porting non-destructive? > >#ifdef Plan9 >#define void unsigned char >#endif It could be however, two issues: 1) I don't see how this has anything to do with the original problem (so I assume it doesn't). 2) There are other uses of void where doing that may not be what you want it to be: void foo(void); becomes: unsigned char foo(unsigned char); doubtful this is your intent for either the argument list or return value. However, it may or may not make sense for you to typedef a type that is either void * or char *. You don't make it clear what problem is being solved by your question though, so it's unclear if offering these ideas are just solutions looking for (non)problems or not :) Also, re non-destructive, it's unclear what you mean? -- Greg Comeau / 4.3.10.1 with C++0xisms now in beta! Comeau C/C++ ONLINE ==> http://www.comeaucomputing.com/tryitout World Class Compilers: Breathtaking C++, Amazing C99, Fabulous C90. Comeau C/C++ with Dinkumware's Libraries... Have you tried it?