Discussion:
[Bug c++/14124] New: enum definition with __attribute__((packed)) gives syntax errors
jcooper at korgrd dot com
2004-02-12 06:13:35 UTC
Permalink
On Linux 2.4.24, using gcc 3.3.2

I'm following the instructions as described here:
http://gcc.gnu.org/onlinedocs/gcc-3.3.2/gcc/Type-Attributes.html#Type%20Attributes

Specifically, I say
enum testEnum { x = 1, y = 2 } __attribute__((packed));

and I get:
error: semicolon missing after declaration of `testEnum'


I've also tried:
enum __attribute__((packed)) testEnum2 { z = 3 };
typedef enum { abc = 4 } __attribute__((packed)) testEnum3;

Both which fail with syntax errors. See cpp and gcc output listings below.

It is not practical for us to use -fshort-enums, so we really need this to
work. Please advise!

Thanks
-John

Output of cpp:

# 1 "enum.cpp"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "enum.cpp"
enum testEnum { x = 1, y = 2 } __attribute__((packed));

enum __attribute__((packed)) testEnum2 { z = 3 };

typedef enum { abc = 4 } __attribute__((packed)) testEnum3;

int main()
{
testEnum t;
testEnum2 tt;
testEnum3 ttt
}

---------------------------------
Output of gcc -v -save-temps enum.cpp :

Reading specs from /home/jcooper/bin/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/specs
Configured with: ../gcc-3.3.2/configure --prefix=/home/jcooper/bin
Thread model: posix
gcc version 3.3.2
/home/jcooper/bin/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/cc1plus -E -D__GNUG__=3
-quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=2
-D_GNU_SOURCE enum.cpp enum.ii
ignoring nonexistent directory "/home/jcooper/bin/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/jcooper/bin/include/c++/3.3.2
/home/jcooper/bin/include/c++/3.3.2/i686-pc-linux-gnu
/home/jcooper/bin/include/c++/3.3.2/backward
/usr/local/include
/home/jcooper/bin/include
/home/jcooper/bin/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include
/usr/include
End of search list.
/home/jcooper/bin/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/cc1plus -fpreprocessed
enum.ii -quiet -dumpbase enum.cpp -auxbase enum -version -o enum.s
GNU C++ version 3.3.2 (i686-pc-linux-gnu)
compiled by GNU C version 3.3.2.
GGC heuristics: --param ggc-min-expand=36 --param ggc-min-heapsize=11837
enum.cpp:1: error: semicolon missing after declaration of `testEnum'
enum.cpp:3: error: parse error before `__attribute__'
enum.cpp:5: error: semicolon missing after enum declaration
enum.cpp: In function `int main()':
enum.cpp:10: error: `testEnum2' undeclared (first use this function)
enum.cpp:10: error: (Each undeclared identifier is reported only once for each
function it appears in.)
enum.cpp:10: error: parse error before `;' token
--
Summary: enum definition with __attribute__((packed)) gives
syntax errors
Product: gcc
Version: 3.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jcooper at korgrd dot com
CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
pinskia at gcc dot gnu dot org
2004-02-12 09:04:44 UTC
Permalink
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-02-12 09:04 -------
Well this is no longer rejected on 3.4.0 but it still ignores the attribute for some reason. I think the
documention was written for the C front-end but never updated for the C++ front-end at all.
--
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Keywords| |wrong-code
Known to fail| |2.95.3 2.97 3.0 3.0.1 3.0.2
| |3.0.3 3.0.4 3.1 3.1.1 3.1.2
| |3.2 3.2.1 3.2.2 3.2.3 3.3
| |3.3.1 3.3.2 3.3.3 3.4.0
| |3.5.0
Last reconfirmed|0000-00-00 00:00:00 |2004-02-12 09:04:40
date| |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
jcooper at korgrd dot com
2004-02-12 15:40:51 UTC
Permalink
------- Additional Comments From jcooper at korgrd dot com 2004-02-12 15:40 -------
Thanks Andrew for confirming.

I see you've reclassified it as an enhancement. That being the case, can I
expect it to be fixed in the near term??

If not, do you have any suggestions for a workaround? The reason we can't use
-fshort-enums is it's a large complex system with interfaces into other systems.
.. using -fshort-enums invariably leads to incosistencies and segfaults :(

Thanks again,
-John
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |WAITING


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
giovannibajo at libero dot it
2004-02-12 16:05:10 UTC
Permalink
------- Additional Comments From giovannibajo at libero dot it 2004-02-12 16:05 -------
I'm afraid it will take a while for this feature to be added. It is in fact an
enhancement request. Also, even if a patch was made today, it would not be
eligible for 3.4.x anymore, so it would go into 3.5.x, which won't see the
light until 2005.

Of course, if you can use a custom compiler version, you could backport such a
patch to a local 3.4-based compiler. If you really need it done fast, I'm sure
you can find a contractor that can develop it quite fast. I suggest you to ask
on the gcc mailing list about it.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
Last reconfirmed|2004-02-12 09:04:40 |2004-02-12 16:05:09
date| |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
pinskia at gcc dot gnu dot org
2004-10-26 21:56:49 UTC
Permalink
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-10-26 21:56 -------
*** Bug 18165 has been marked as a duplicate of this bug. ***
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |austern at apple dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
pinskia at gcc dot gnu dot org
2004-10-28 04:42:27 UTC
Permalink
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-10-28 04:42 -------
Patch here: <http://gcc.gnu.org/ml/gcc-patches/2004-10/msg02462.html>.
--
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
Known to fail|2.95.3 2.97 3.0 3.0.1 3.0.2 |2.95.3 2.97 3.0 3.0.1 3.0.2
|3.0.3 3.0.4 3.1 3.1.1 3.1.2 |3.0.3 3.0.4 3.1 3.1.1 3.1.2
|3.2 3.2.1 3.2.2 3.2.3 3.3 |3.2 3.2.1 3.2.2 3.2.3 3.3
|3.3.1 3.3.2 3.3.3 3.4.0 4.0 |3.3.1 3.3.2 3.3.3 3.4.0
| |4.0.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
pinskia at gcc dot gnu dot org
2004-10-29 02:11:07 UTC
Permalink
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-10-29 02:11 -------
Fixed in 4.0.0.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Target Milestone|--- |4.0.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14124
Loading...