[comp.sys.apollo] trouble with cc

inst182@tuvie (Inst.f.Techn.Informatik) (01/04/90)

Th Apollo C Compiler seems to have problems when initializing typedef'd 
structures. This is especialliy disturbing when compiling X-programs, 
since initializing structures becomes virtually impossible.    

Has anybody had a similar problem and found a solution ?

  Michael K. Gschwind           ...!uunet!mcsun!tuvie!vlsivie!gschwind

--------------------------------------------------------------------------------

/*
 * SCCS ID : @(#)xpclock.h	1.2   11/1/89
 * 
 * xpclock.h - Header for Pendulum Clock for X11
 * 
 * Author: Kazuhiko Shutoh, 1989.
 * 
 * Permission to use, copy, modify and distribute without charge this software,
 * documentation, images, etc. is granted, provided that this comment and the
 * author's name is retained.  The author assumes no responsibility for lost
 * sleep as a consequence of use of this software.
 * 
 * Send any comments, bug reports, etc. to: shutoh@isl.yamaha.co.jp or, for
 * oversea: shutoh%isl.yamaha.co.jp%kddlab@uunet.uu.net
 * 
 */

#define		PI		3.141592654

#define		ON		1
#define		OFF		0

#define		CLOCKFACE_UPDATE	5000

/* Number vector :-) fonts 	 */

typedef struct {
	double          x1;
	double          y1;
	double          x2;
	double          y2;
}               NumberSegment;

typedef struct {
	NumberSegment   segment[5];
}               NumberSegmentRec;

NumberSegmentRec num_segments[12] = {
	{
		{0, 0, 0, 2},	/* 1 */
		{0, 0, 0, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0, 2},	/* 2 */
		{1, 0, 1, 2},
		{0, 0, 0, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0, 2},	/* 3 */
		{1, 0, 1, 2},
		{2, 0, 2, 2},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0, 2},	/* 4 */
		{1, 0, 1.5, 2},
		{1.5, 2, 2, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0.5, 2},	/* 5 */
		{0.5, 2, 1, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0.5, 2},	/* 6 */
		{0.5, 2, 1, 0},
		{2, 0, 2, 2},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0.5, 2},	/* 7 */
		{0.5, 2, 1, 0},
		{2, 0, 2, 2},
		{3, 0, 3, 2},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 0.5, 2},	/* 8 */
		{0.5, 2, 1, 0},
		{2, 0, 2, 2},
		{3, 0, 3, 2},
		{4, 0, 4, 2}
	},
	{
		{0, 0, 0, 2},	/* 9 */
		{1, 0, 2, 2},
		{2, 0, 1, 2},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 1, 2},	/* 10 */
		{0, 2, 1, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 1, 2},	/* 11 */
		{0, 2, 1, 0},
		{2, 0, 2, 2},
		{0, 0, 0, 0},
		{0, 0, 0, 0}
	},
	{
		{0, 0, 1, 2},	/* 12 */
		{0, 2, 1, 0},
		{2, 0, 2, 2},
		{3, 0, 3, 2},
		{0, 0, 0, 0}
	}
};

/* Resource for Clock Widget	 */

static XrmOptionDescRec options[] = {
	{"-chime", "*clock.chime", XrmoptionNoArg, "TRUE"},
	{"-hd", "*clock.hands", XrmoptionSepArg, NULL},
	{"-hands", "*clock.hands", XrmoptionSepArg, NULL},
	{"-hl", "*clock.highlight", XrmoptionSepArg, NULL},
	{"-highlight", "*clock.highlight", XrmoptionSepArg, NULL},
	{"-update", "*clock.update", XrmoptionSepArg, NULL},
	{"-padding", "*clock.padding", XrmoptionSepArg, NULL},
	{"-d", "*clock.analog", XrmoptionNoArg, "FALSE"},
	{"-digital", "*clock.analog", XrmoptionNoArg, "FALSE"},
	{"-analog", "*clock.analog", XrmoptionNoArg, "TRUE"},
};
--------------------------------------------------------------------------------

vasta@apollo.HP.COM (John Vasta) (01/05/90)

In article <1047@tuvie> inst182@tuvie (Inst.f.Techn.Informatik) writes:
>
>
>Th Apollo C Compiler seems to have problems when initializing typedef'd 
>structures. This is especialliy disturbing when compiling X-programs, 
>since initializing structures becomes virtually impossible.    
>
>Has anybody had a similar problem and found a solution ?
>
>  Michael K. Gschwind           ...!uunet!mcsun!tuvie!vlsivie!gschwind

The code contains an incorrectly structured initialization list. The
aggregate being initialized has four levels of structure, but the
initialization list contains only three. C allows you to elide braces
for the innermost level of an aggregate, but it appears that the author
had elided them for the next-innermost level. The initializer list
should look like this:

    NumberSegmentRec num_segments[12] = {
    	{
            { /* this was added by me */
    		{0, 0, 0, 2},	/* 1 */
    		{0, 0, 0, 0},
    		{0, 0, 0, 0},
    		{0, 0, 0, 0},
    		{0, 0, 0, 0}
            } /* so was this */
    	},
        ...

By the way, the AT&T 2.0 C++ translator and the GNU C compiler also
complain about this code, so the Apollo C compiler is not the only
one which diagnoses this error.

John Vasta                Apollo Computer (division of Hewlett-Packard)
vasta@apollo.hp.com       M.S. CHA-01-LT
(508) 256-6600 x6362      330 Billerica Road, Chelmsford, MA 01824
UUCP: {decwrl!decvax, mit-eddie, attunix}!apollo!vasta