This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
C vs. C++ parsers and the __attribute__ syntax
- From: "Ulrich Weigand" <weigand at i1 dot informatik dot uni-erlangen dot de>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 27 Oct 2004 15:14:20 +0200 (CEST)
- Subject: C vs. C++ parsers and the __attribute__ syntax
Hello,
we're seeing discrepancies between the C and C++ parser as to how
__attribute__ ((mode)) is handled. On s390x-ibm-{tpf,linux}, we
use __attribute__ ((mode (SI))) with pointer types to declare 32-bit
pointer variables (the default pointer size is 64-bit).
The question is now how to express this syntactically. Is there
a document that formally specifies the syntax of the attribute
extension? The info pages appear a bit vague ...
I had assumed the following:
typedef struct test * __attribute__ ((mode (SI))) test_ptr32;
would be the correct way to declare a SImode pointer type to
'struct test', if the placement of attribute is analogous to
'const' or 'volatile' -- it is 'test_ptr32' that is of mode
SImode, not '*test_ptr32'.
And indeed, this does have the effect I intended with the C
parser. However, the C++ parser, while it accepts the above
construct, appears to simply ignore the attribute.
On the hand, *this* declaration:
typedef struct test __attribute__ ((mode (SI))) *test_ptr32;
*has* the effect I wanted to achieve (declaring test_ptr32
as an SImode pointer type) with the C++ parser. Interestingly
enough, the C parser accepts this construct as well, with the
same effect as the first.
Is this intentional? If not, which parser gets it right?
How would I declare a type like 'an SImode pointer to a
TImode integer'?
Bye,
Ulrich
--
Dr. Ulrich Weigand
weigand@informatik.uni-erlangen.de