http://llvm.org/bugs/show_bug.cgi?id=14037
Bug #: 14037
Summary: #pragma pack in nested struct rejected, and with poor
diagnostics
Product: clang
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: -New Bugs
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected]
Classification: Unclassified
clang 3.1 as well as the latest trunk version rejects the following:
struct s {
#pragma pack(push)
#pragma pack(1)
struct { char x; int y; } nested;
#pragma pack(pop)
};
int f(struct s *p) { return p->nested.x + p->nested.y; }
(The f function is there just to check from the asm that the struct is
correctly packed.)
The output from clang consists of the following fairly unhelpful errors:
$ clang -S asdf.c
asdf.c:2:9: error: type name requires a specifier or qualifier
#pragma pack(push)
^
asdf.c:2:9: error: expected member name or ';' after declaration specifiers
#pragma pack(push)
^~~~
asdf.c:1:11: error: expected ';' at end of declaration list
struct s {
^
;
asdf.c:5:9: error: type name requires a specifier or qualifier
#pragma pack(pop)
^
asdf.c:5:9: error: expected member name or ';' after declaration specifiers
#pragma pack(pop)
^~~~
asdf.c:4:37: error: expected ';' at end of declaration list
struct { char x; int y; } nested;
^
;
asdf.c:7:32: error: no member named 'nested' in 'struct s'
int f(struct s *p) { return p->nested.x + p->nested.y; }
~ ^
asdf.c:7:46: error: no member named 'nested' in 'struct s'
int f(struct s *p) { return p->nested.x + p->nested.y; }
~ ^
8 errors generated.
If the #pragmas are placed outside the top-level struct, clang compiles the
file without error. GCC 4.7.1 accepts both versions of the code.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs