[gnu.gcc.bug] Gnu gcc 1.35 and XV11R3 don't mix on Sun3

ado@NCIFCRF.GOV (Arthur David Olson) (04/29/89)

(We're running SunOS 4.0 on a Sun 3/280.)

Description:
	Compiling the XV11R3 server on a Sun3 with gcc 1.35 doesn't work
	if you use enough options.

Repeat-By:
	Compiling and getting a core dump in the "CreateWindow" function
	of the server.

	The attached code will show up the problem if you compile it on
	a Sun3 this way:
	     gcc -fstrength-reduce -fcombine-regs -finline-functions -S -O try.c
	The problem is in this generated code. . .
		L22:
			movel a6@(-66),a4
			movew a4@(16),a0
			subl a2,a2
			movel a4@(18),d2
			lea a0@(a0:l:2),a4
			movel a4,d0
			movel d0,d3
			asll #2,d3
			addl a4@(18),d3
	. . .where gcc is copying the value of "pScreen", stored in a6@(-66),
	to a4, then calculating another value into a4, and finally, in the
	"addl a4@(18), d3" instruction, assuming that a4 still holds the
	value of pScreen, not realizing that it's been clobbered.
-- 
			Space:  Canada, 0 tries ever.
	Arthur David Olson    ado@ncifcrf.gov    ADO is a trademark of Ampex.
-- 
typedef unsigned long XID;
typedef XID Window;
typedef XID Drawable;
typedef XID Font;
typedef XID Pixmap;
typedef XID Cursor;
typedef XID Colormap;
typedef XID GContext;
typedef XID KeySym;
typedef unsigned long Mask;
typedef unsigned long Atom;
typedef unsigned long VisualID;
typedef unsigned long Time;
typedef unsigned char KeyCode;
typedef long INT32;
typedef short INT16;
typedef char INT8;
typedef unsigned long CARD32;
typedef unsigned short CARD16;
typedef unsigned char CARD8;
typedef unsigned long BITS32;
typedef unsigned short BITS16;
typedef unsigned char BYTE;
typedef unsigned char BOOL;
typedef struct _xRectangle {
 INT16 x , y ;
 CARD16 width , height ;
} xRectangle;
typedef CARD16 KeyButMask;
typedef struct {
 union {
 struct {
 BYTE type;
 BYTE detail;
 CARD16 sequenceNumber ;
 } u;
 struct {
 CARD32 pad00 ;
 CARD32 time ;
 CARD32 root , event , child ;
 INT16 rootX , rootY , eventX , eventY ;
 KeyButMask state ;
 BOOL sameScreen;
 BYTE pad1;
 } keyButtonPointer;
 struct {
 CARD32 pad00 ;
 CARD32 time ;
 CARD32 root , event , child ;
 INT16 rootX , rootY , eventX , eventY ;
 KeyButMask state ;
 BYTE mode;
 BYTE flags;
 } enterLeave;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 BYTE mode;
 BYTE pad1, pad2, pad3;
 } focus;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 CARD16 x , y , width , height ;
 CARD16 count ;
 CARD16 pad2 ;
 } expose;
 struct {
 CARD32 pad00 ;
 CARD32 drawable ;
 CARD16 x , y , width , height ;
 CARD16 minorEvent ;
 CARD16 count ;
 BYTE majorEvent;
 BYTE pad1, pad2, pad3;
 } graphicsExposure;
 struct {
 CARD32 pad00 ;
 CARD32 drawable ;
 CARD16 minorEvent ;
 BYTE majorEvent;
 BYTE bpad;
 } noExposure;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 CARD8 state;
 BYTE pad1, pad2, pad3;
 } visibility;
 struct {
 CARD32 pad00 ;
 CARD32 parent , window ;
 INT16 x , y ;
 CARD16 width , height , borderWidth ;
 BOOL override;
 BYTE bpad;
 } createNotify;
 struct {
 CARD32 pad00 ;
 CARD32 event , window ;
 } destroyNotify;
 struct {
 CARD32 pad00 ;
 CARD32 event , window ;
 BOOL fromConfigure;
 BYTE pad1, pad2, pad3;
 } unmapNotify;
 struct {
 CARD32 pad00 ;
 CARD32 event , window ;
 BOOL override;
 BYTE pad1, pad2, pad3;
 } mapNotify;
 struct {
 CARD32 pad00 ;
 CARD32 parent , window ;
 } mapRequest;
 struct {
 CARD32 pad00 ;
 CARD32 event , window , parent ;
 INT16 x , y ;
 BOOL override;
 BYTE pad1, pad2, pad3;
 } reparent;
 struct {
 CARD32 pad00 ;
 CARD32 event , window , aboveSibling ;
 INT16 x , y ;
 CARD16 width , height , borderWidth ;
 BOOL override;
 BYTE bpad;
 } configureNotify;
 struct {
 CARD32 pad00 ;
 CARD32 parent , window , sibling ;
 INT16 x , y ;
 CARD16 width , height , borderWidth ;
 CARD16 valueMask ;
 CARD32 pad1 ;
 } configureRequest;
 struct {
 CARD32 pad00 ;
 CARD32 event , window ;
 INT16 x , y ;
 CARD32 pad1, pad2, pad3, pad4;
 } gravity;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 CARD16 width , height ;
 } resizeRequest;
 struct {
 CARD32 pad00 ;
 CARD32 event , window , parent ;
 BYTE place;
 BYTE pad1, pad2, pad3;
 } circulate;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 CARD32 atom ;
 CARD32 time ;
 BYTE state;
 BYTE pad1;
 CARD16 pad2 ;
 } property;
 struct {
 CARD32 pad00 ;
 CARD32 time ;
 CARD32 window ;
 CARD32 atom ;
 } selectionClear;
 struct {
 CARD32 pad00 ;
 CARD32 time ;
 CARD32 owner , requestor ;
 CARD32 selection , target , property ;
 } selectionRequest;
 struct {
 CARD32 pad00 ;
 CARD32 time ;
 CARD32 requestor ;
 CARD32 selection , target , property ;
 } selectionNotify;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 CARD32 colormap ;
 BOOL new;
 BYTE state;
 BYTE pad1, pad2;
 } colormap;
 struct {
 CARD32 pad00 ;
 CARD8 request;
 CARD8 firstKeyCode;
 CARD8 count;
 BYTE pad1;
 } mappingNotify;
 struct {
 CARD32 pad00 ;
 CARD32 window ;
 union {
 struct {
 CARD32 type ;
 INT32 longs0 ;
 INT32 longs1 ;
 INT32 longs2 ;
 INT32 longs3 ;
 INT32 longs4 ;
 } l;
 struct {
 CARD32 type ;
 INT16 shorts0 ;
 INT16 shorts1 ;
 INT16 shorts2 ;
 INT16 shorts3 ;
 INT16 shorts4 ;
 INT16 shorts5 ;
 INT16 shorts6 ;
 INT16 shorts7 ;
 INT16 shorts8 ;
 INT16 shorts9 ;
 } s;
 struct {
 CARD32 type ;
 INT8 bytes[20];
 } b;
 } u;
 } clientMessage;
 } u;
} xEvent;
typedef unsigned char *pointer;
typedef int Bool;
typedef unsigned long ATOM;
unsigned long *Xalloc();
typedef struct _Box *BoxPtr;
typedef struct _PixmapFormat *PixmapFormatPtr;
typedef struct _Visual *VisualPtr;
typedef struct _Depth *DepthPtr;
typedef struct _Screen *ScreenPtr;
typedef struct _Region *RegionPtr;
typedef struct _DrawInfo *DrawablePtr;
typedef struct _Pixmap *PixmapPtr;
typedef struct _GCInterest *GCInterestPtr;
typedef struct _GC *GCPtr;
typedef unsigned long Pixel;
typedef struct _PixmapFormat {
 unsigned char depth;
 unsigned char bitsPerPixel;
 unsigned char scanlinePad;
 } PixmapFormatRec;
typedef struct _Visual {
 unsigned long vid;
 short screen;
 short class;
 unsigned long redMask, greenMask, blueMask;
 int offsetRed, offsetGreen, offsetBlue;
 short bitsPerRGBValue;
 short ColormapEntries;
 short nplanes;
 } VisualRec;
typedef struct _Depth {
 int depth;
 int numVids;
 unsigned long *vids;
 } DepthRec;
typedef struct _Screen {
 int myNum;
 ATOM id;
 short width, height;
 short mmWidth, mmHeight;
 short numDepths;
 DepthPtr allowedDepths;
 short rootDepth;
 unsigned long rootVisual;
 unsigned long defColormap;
 short minInstalledCmaps, maxInstalledCmaps;
 char backingStoreSupport, saveUnderSupport;
 unsigned long whitePixel, blackPixel;
 unsigned long rgf;
 GCPtr GCperDepth[8 +1];
 PixmapPtr PixmapPerDepth[1];
 pointer devPrivate;
 short numVisuals;
 VisualPtr visuals;
 Bool (* CloseScreen)();
 void (* QueryBestSize)();
 Bool (* SaveScreen)();
 void (* GetImage)();
 unsigned int *(* GetSpans)();
 void (* PointerNonInterestBox)();
 Bool (* CreateWindow)();
 Bool (* DestroyWindow)();
 Bool (* PositionWindow)();
 Bool (* ChangeWindowAttributes)();
 Bool (* RealizeWindow)();
 Bool (* UnrealizeWindow)();
 int (* ValidateTree)();
 void (* WindowExposures)();
 PixmapPtr (* CreatePixmap)();
 Bool (* DestroyPixmap)();
 Bool (* RealizeFont)();
 Bool (* UnrealizeFont)();
 void (* ConstrainCursor)();
 void (* CursorLimits)();
 Bool (* DisplayCursor)();
 Bool (* RealizeCursor)();
 Bool (* UnrealizeCursor)();
 void (* RecolorCursor)();
 Bool (* SetCursorPosition)();
 Bool (* CreateGC)();
 void (* CreateColormap)();
 void (* DestroyColormap)();
 void (* InstallColormap)();
 void (* UninstallColormap)();
 int (* ListInstalledColormaps) ();
 void (* StoreColors)();
 void (* ResolveColor)();
 RegionPtr (* RegionCreate)();
 void (* RegionCopy)();
 void (* RegionDestroy)();
 int (* Intersect)();
 int (* Union)();
 int (* Subtract)();
 int (* Inverse)();
 void (* RegionReset)();
 void (* TranslateRegion)();
 int (* RectIn)();
 Bool (* PointInRegion)();
 Bool (* RegionNotEmpty)();
 void (* RegionEmpty)();
 BoxPtr (*RegionExtents)();
 void (* SendGraphicsExpose)();
 void (* BlockHandler)();
 void (* WakeupHandler)();
 pointer blockData;
 pointer wakeupData;
} ScreenRec;
typedef struct _ScreenInfo {
 int imageByteOrder;
 int bitmapScanlineUnit;
 int bitmapScanlinePad;
 int bitmapBitOrder;
 int numPixmapFormats;
 PixmapFormatRec
 formats[8 ];
 int arraySize;
 int numScreens;
 ScreenPtr screen;
} ScreenInfo;
typedef struct _DDXPoint {
 short x, y;
} DDXPointRec;
typedef struct _Box {
 short x1, y1, x2, y2;
} BoxRec;
typedef struct _Region {
 long size;
 long numRects;
 BoxPtr rects;
 BoxRec extents;
} RegionRec;
typedef struct _BackingStore *BackingStorePtr;
typedef struct _Window *WindowPtr;
typedef struct _DrawInfo {
 short type;
 ScreenPtr pScreen;
 int depth;
 unsigned long serialNumber;
} DrawableRec;
typedef struct _Pixmap {
 DrawableRec drawable;
 int width, height;
 int refcnt;
 int devKind;
 pointer devPrivate;
 } PixmapRec;
typedef struct _Cursor *CursorPtr;
typedef struct _Property *PropertyPtr;
typedef struct _Client *ClientPtr;
typedef struct _BackingStore {
 RegionPtr obscured;
 DDXPointRec oldAbsCorner;
 void (* SaveDoomedAreas)();
 RegionPtr (* RestoreAreas)();
 void (* ExposeCopy)();
 void (* TranslateBackingStore)();
 void (* ClearToBackground)();
 void (* DrawGuarantee)();
} BackingStoreRec;
typedef struct _Window {
 DrawableRec drawable;
 VisualID visual;
 struct _Window *parent;
 struct _Window *nextSib;
 struct _Window *prevSib;
 struct _Window *firstChild;
 struct _Window *lastChild;
 CursorPtr cursor;
 ClientPtr client;
 Window wid;
 RegionPtr clipList;
 RegionPtr winSize;
 RegionPtr borderClip;
 RegionPtr borderSize;
 RegionPtr exposed;
 RegionPtr borderExposed;
 xRectangle clientWinSize;
 DDXPointRec absCorner;
 DDXPointRec oldAbsCorner;
 int class;
 Mask eventMask;
 Mask dontPropagateMask;
 Mask allEventMasks;
 Mask deliverableEvents;
 pointer otherClients;
 pointer passiveGrabs;
 PropertyPtr userProps;
 XID nolongerused;
 PixmapPtr backgroundTile;
 unsigned long backgroundPixel;
 PixmapPtr borderTile;
 unsigned long borderPixel;
 int borderWidth;
 void (* PaintWindowBackground)();
 void (* PaintWindowBorder)();
 void (* CopyWindow)();
 void (* ClearToBackground)();
 unsigned long backingBitPlanes;
 unsigned long backingPixel;
 int backingStore;
 BackingStorePtr backStorage;
 char bitGravity;
 char winGravity;
 Colormap colormap;
 Bool saveUnder:1;
 unsigned visibility:2;
 unsigned mapped:1;
 unsigned realized:1;
 unsigned viewable:1;
 unsigned overrideRedirect:1;
 unsigned marked:1;
 pointer devBackingStore;
 pointer devPrivate;
} WindowRec;
typedef unsigned long Leds;
typedef struct
{
 unsigned short color;
 short refcnt;
} SHAREDCOLOR;
typedef struct
{
 unsigned short red, green, blue;
} LOCO;
typedef struct
{
 SHAREDCOLOR *red, *green, *blue;
} SHCO;
typedef struct _Cursor {
 unsigned char *source;
 unsigned char *mask;
 long width;
 long height;
 long xhot;
 long yhot;
 unsigned foreRed, foreGreen, foreBlue;
 unsigned backRed, backGreen, backBlue;
 int refcnt;
 pointer devPriv[3 ];
} CursorRec;
typedef struct _Client {
 int index;
 Mask clientAsMask;
 pointer requestBuffer;
 pointer osPrivate;
 Bool swapped;
 void (* pSwapReplyFunc)();
 XID errorValue;
 int sequence;
 int closeDownMode;
 int clientGone;
 int noClientException;
 DrawablePtr lastDrawable;
 Drawable lastDrawableID;
 GCPtr lastGC;
 GContext lastGCID;
 pointer *saveSet;
 int numSaved;
 int requestLog[100 ];
 int requestLogIndex;
 pointer screenPrivate[3 ];
} ClientRec;
typedef struct _DIXFontProp *DIXFontPropPtr;
typedef struct _Font *FontPtr;
typedef struct _GCInterest {
 struct _GCInterest *pNextGCInterest;
 struct _GCInterest *pLastGCInterest;
 int length;
 ATOM owner;
 unsigned long ValInterestMask;
 void (* ValidateGC) ();
 unsigned long ChangeInterestMask;
 int (* ChangeGC) ();
 void (* CopyGCSource) ();
 void (* CopyGCDest) ();
 void (* DestroyGC) ();
 pointer extPriv;
} GCInterestRec;
typedef struct _GC {
 ScreenPtr pScreen;
 pointer devPriv;
 pointer devBackingStore;
 int depth;
 unsigned long serialNumber;
 GCInterestPtr pNextGCInterest;
 GCInterestPtr pLastGCInterest;
 int alu;
 unsigned long planemask;
 unsigned long fgPixel, bgPixel;
 int lineWidth;
 int lineStyle;
 int capStyle;
 int joinStyle;
 int fillStyle;
 int fillRule;
 int arcMode;
 PixmapPtr tile;
 PixmapPtr stipple;
 DDXPointRec patOrg;
 FontPtr font;
 int subWindowMode;
 Bool graphicsExposures;
 DDXPointRec clipOrg;
 pointer clientClip;
 int clientClipType;
 int dashOffset;
 int numInDashList;
 unsigned char *dash;
 unsigned long stateChanges;
 DDXPointRec lastWinOrg;
 int miTranslate:1;
 void (* FillSpans)();
 void (* SetSpans)();
 void (* PutImage)();
 RegionPtr (* CopyArea)();
 RegionPtr (* CopyPlane)();
 void (* PolyPoint)();
 void (* Polylines)();
 void (* PolySegment)();
 void (* PolyRectangle)();
 void (* PolyArc)();
 void (* FillPolygon)();
 void (* PolyFillRect)();
 void (* PolyFillArc)();
 int (* PolyText8)();
 int (* PolyText16)();
 void (* ImageText8)();
 void (* ImageText16)();
 void (* ImageGlyphBlt)();
 void (* PolyGlyphBlt)();
 void (* PushPixels)();
 void (* LineHelper)();
 void (* ChangeClip) ();
 void (* DestroyClip) ();
 void (* CopyClip)();
} GC;

int screenIsSaved = 1 ;
int defaultBackingStore = 0 ;

ClippedRegionFromBox(pWin, Rgn, x, y, w, h)
 register WindowPtr pWin;
 RegionPtr Rgn;
 int x, y, w, h;
{
 register ScreenPtr pScreen = pWin->drawable.pScreen;
 BoxRec box;
 box = *((* pScreen->RegionExtents)(pWin->winSize));
 if (x > box.x1)
 box.x1 = x;
 if (y > box.y1)
 box.y1 = y;
 x += w;
 if (x < box.x2)
 box.x2 = x;
 y += h;
 if (y < box.y2)
 box.y2 = y;
 if (box.x1 > box.x2)
 box.x2 = box.x1;
 if (box.y1 > box.y2)
 box.y2 = box.y1;
 (* pScreen->RegionReset)(Rgn, &box);
 (* pScreen->Intersect)(Rgn, Rgn, pWin->winSize);
}

extern WindowPtr	RealChildHead();

WindowPtr
CreateWindow(wid, pParent, x, y, w, h, bw, class, vmask, vlist,
 depth, client, visual, error)
 Window wid;
 WindowPtr pParent;
 short x,y;
 unsigned short w, h, bw;
 unsigned short class;
 Mask vmask;
 XID *vlist;
 int depth;
 ClientPtr client;
 VisualID visual;
 int *error;
{
 WindowPtr pWin, pHead;
 ScreenPtr pScreen;
 xEvent event;
 int idepth, ivisual;
 Bool fOK;
 DepthPtr pDepth;
 if (class == 0L )
 class = pParent->class;
 if ((class != 1 ) && (class != 2 ))
 {
 *error = 2 ;
 client->errorValue = class;
 return (WindowPtr) 0 ;
 }
 if ((class != 2 ) && (pParent->class == 2 ))
 {
 *error = 8 ;
 return (WindowPtr) 0 ;
 }
 if ((class == 2 ) && ((bw != 0) || (depth != 0)))
 {
 *error = 8 ;
 return (WindowPtr) 0 ;
 }
 pScreen = pParent->drawable.pScreen;
 fOK = 0 ;
 if ((class == 1 ) && (depth == 0))
 depth = pParent->drawable.depth;
 if (visual == 0L )
 visual = pParent->visual;
 for(idepth = 0; idepth < pScreen->numDepths; idepth++)
 {
 pDepth = (DepthPtr) &pScreen->allowedDepths[idepth];
 if ((depth == pDepth->depth) || (depth == 0))
 {
 for (ivisual = 0; ivisual < pDepth->numVids; ivisual++)
 {
 if (visual == pDepth->vids[ivisual])
 {
 fOK = 1 ;
 break;
 }
 }
 }
 }
 if (fOK == 0 )
 {
 *error = 8 ;
 return (WindowPtr) 0 ;
 }
 if (((vmask & ( (1L<<2) | (1L<<3) )) == 0) &&
 (class != 2 ) &&
 (depth != pParent->drawable.depth))
 {
 *error = 8 ;
 return (WindowPtr) 0 ;
 }
 if (((vmask & (1L<<13) ) == 0) &&
 (class != 2 ) &&
 ((visual != pParent->visual) || (pParent->colormap == 0L )))
 {
 *error = 8 ;
 return (WindowPtr) 0 ;
 }
 pWin = (WindowPtr) Xalloc((unsigned long)( sizeof(WindowRec) )) ;
 InitProcedures(pWin);
 pWin->drawable = pParent->drawable;
 pWin->drawable.depth = depth;
 if (class == 2 )
 pWin->drawable.type = (short) -1 ;
 pWin->wid = wid;
 pWin->client = client;
 pWin->visual = visual;
 pWin->class = class;
 SetWindowToDefaults(pWin, pScreen);
 if ((class == 2 ) || (visual != pParent->visual))
 pWin->colormap = 0L ;
 else
 pWin->colormap = pParent->colormap;
 pWin->cursor = (CursorPtr) 0L ;
 pWin->borderWidth = (int) bw;
 pWin->backgroundTile = (PixmapPtr) 0L ;
 if ((vmask & ( (1L<<2) | (1L<<3) )) != 0)
 pWin->borderTile = (PixmapPtr)3 ;
 else
 {
 pWin->borderTile = pParent->borderTile;
 if (( ((pParent->borderTile != (PixmapPtr) 0L ) && (pParent->borderTile != (PixmapPtr)3 ) && (pParent->borderTile != (PixmapPtr) 1L ))? 1 : 0 ) )
 pParent->borderTile->refcnt++;
 }
 pWin->borderPixel = pParent->borderPixel;
 pWin->clientWinSize.x = x + (int)bw;
 pWin->clientWinSize.y = y + (int)bw;
 pWin->clientWinSize.height = h;
 pWin->clientWinSize.width = w;
 pWin->absCorner.x = pWin->oldAbsCorner.x = pParent->absCorner.x + x + (int)bw;
 pWin->absCorner.y = pWin->oldAbsCorner.y = pParent->absCorner.y + y + (int)bw;
 pWin->clipList = (* pScreen->RegionCreate)( 0 , 1);
 pWin->borderClip = (* pScreen->RegionCreate)( 0 , 1);
 pWin->winSize = (* pScreen->RegionCreate)( 0 , 1);
 ClippedRegionFromBox(pParent, pWin->winSize,
 pWin->absCorner.x, pWin->absCorner.y, (int)w, (int)h);
 pWin->borderSize = (* pScreen->RegionCreate)( 0 , 1);
 if (bw)
 ClippedRegionFromBox(pParent, pWin->borderSize,
 pWin->absCorner.x - (int)bw, pWin->absCorner.y - (int)bw,
 (int)(w + (bw<<1)), (int)(h + (bw<<1)));
 else
 (* pScreen->RegionCopy)(pWin->borderSize, pWin->winSize);
 pWin->parent = pParent;
 pHead = RealChildHead(pParent);
 if (pHead)
 {
 pWin->nextSib = pHead->nextSib;
 if (pHead->nextSib)
 pHead->nextSib->prevSib = pWin;
 else
 pParent->lastChild = pWin;
 pHead->nextSib = pWin;
 pWin->prevSib = pHead;
 }
 else
 {
 pWin->nextSib = pParent->firstChild;
 if (pParent->firstChild)
 pParent->firstChild->prevSib = pWin;
 else
 pParent->lastChild = pWin;
 pParent->firstChild = pWin;
 }
 (*pScreen->CreateWindow)(pWin);
 (*pScreen->PositionWindow)(pWin, pWin->absCorner.x, pWin->absCorner.y);
 if ((vmask & (1L<<11) ) == 0)
 (void)EventSelectForWindow(pWin, client, (Mask)0);
 if (vmask)
 *error = ChangeWindowAttributes(pWin, vmask, vlist, pWin->client);
 else
 *error = 0 ;
 if (*error != 0 )
 {
 (void)EventSelectForWindow(pWin, client, (Mask)0);
 DeleteWindow(pWin, wid);
 return (WindowPtr) 0 ;
 }
 if (!(vmask & (1L<<6) ) && (defaultBackingStore != 0 ))
 {
 XID value = defaultBackingStore;
 (void)ChangeWindowAttributes(pWin, (1L<<6) , &value, pWin->client);
 }
 WindowHasNewCursor(pWin);
 event.u.u.type = 16 ;
 event.u.createNotify.window = wid;
 event.u.createNotify.parent = pParent->wid;
 event.u.createNotify.x = x;
 event.u.createNotify.y = y;
 event.u.createNotify.width = w;
 event.u.createNotify.height = h;
 event.u.createNotify.borderWidth = bw;
 event.u.createNotify.override = pWin->overrideRedirect;
 DeliverEvents(pParent, &event, 1, ((WindowPtr) 0) );
 return pWin;
}