Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-ID: <20010904212619.8227.qmail@web14510.mail.yahoo.com> Date: Wed, 5 Sep 2001 07:26:19 +1000 (EST) From: =?iso-8859-1?q?Danny=20Smith?= Subject: Re: Problems executing programs which includes rpcndr.h To: Cygwin Cc: mingw-dvlpr MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit This is an old problem with C++ parsing of function attribute that is fixed in gcc-2.95.3. However the fix has not been incorportaed in 3.0.x branch. Here is Bob Wilson's patch that has been applied to 2.95.3 (at least in the cygwin and mingw instantiations): http://gcc.gnu.org/ml/gcc-patches/2001-01/msg01751.html Have a look at the assembly for the first example you sent. _malloc AT 4 looks a bit strange, doesn't it. That is why, in the past, windows.h had to be included before gcc/cp/decl.c has undergone some serious reorganisation. Following is the above patch refreshed for gcc-3.0.1. --- decl.c-3.0.1 Tue Sep 04 19:29:10 2001 +++ decl.c Tue Sep 04 19:38:45 2001 @@ -10469,7 +10469,16 @@ grokdeclarator (declarator, declspecs, d ignore_attrs = 0; else if (inner_attrs) { - decl_attributes (type, inner_attrs, NULL_TREE); + /* Create a dummy decl to pass to decl_attributes. The + attributes will be added to a variant of type, and this + new variant type can be retrieved from the dummy decl. + Passing type directly causes the attributes to be added + to type, which is wrong because type may be used + elsewhere without attributes. */ + + tree dummy = build_decl (TYPE_DECL, NULL_TREE, type); + decl_attributes (dummy, inner_attrs, NULL_TREE); + type = TREE_TYPE (dummy); inner_attrs = NULL_TREE; } @@ -10988,7 +10997,18 @@ grokdeclarator (declarator, declspecs, d if (inner_attrs) { if (! ignore_attrs) - decl_attributes (type, inner_attrs, NULL_TREE); + { + /* Create a dummy decl to pass to decl_attributes. The + attributes will be added to a variant of type, and this + new variant type can be retrieved from the dummy decl. + Passing type directly causes the attributes to be added + to type, which is wrong because type may be used + elsewhere without attributes. */ + + tree dummy = build_decl (TYPE_DECL, NULL_TREE, type); + decl_attributes (dummy, inner_attrs, NULL_TREE); + type = TREE_TYPE (dummy); + } else if (attrlist) TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist)); else Danny Re: Problems executing programs which includes rpcndr.h To: cygwin at cygwin dot com Subject: Re: Problems executing programs which includes rpcndr.h From: David Salotti Date: Tue, 4 Sep 2001 16:28:00 +1000 Organization: Proximity References: <20010903185145 DOT 0dc8de2f DOT david AT proximity DOT com DOT au> -------------------------------------------------------------------------------- Ok, this is pretty weird - but if I rearrange the #include's, I am able to run the program successfully??? Does anyone know what's in rpcndr.h that's conflicting with iostream?? the arrangement that works is: #include #include #include ta Dave _____________________________________________________________________________ http://messenger.yahoo.com.au - Yahoo! Messenger - Voice chat, mail alerts, stock quotes and favourite news and lots more! -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/