<html>
<head>
<base href="https://llvm.org/bugs/" />
</head>
<body><span class="vcard"><a class="email" href="mailto:roger.ferreribanez@arm.com" title="Roger Ferrer Ibanez <roger.ferreribanez@arm.com>"> <span class="fn">Roger Ferrer Ibanez</span></a>
</span> changed
<a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED FIXED - usage of pointers to packed struct members should trigger warning"
href="https://llvm.org/bugs/show_bug.cgi?id=22821">bug 22821</a>
<br>
<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>What</th>
<th>Removed</th>
<th>Added</th>
</tr>
<tr>
<td style="text-align:right;">Status</td>
<td>NEW
</td>
<td>RESOLVED
</td>
</tr>
<tr>
<td style="text-align:right;">Resolution</td>
<td>---
</td>
<td>FIXED
</td>
</tr></table>
<p>
<div>
<b><a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED FIXED - usage of pointers to packed struct members should trigger warning"
href="https://llvm.org/bugs/show_bug.cgi?id=22821#c3">Comment # 3</a>
on <a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED FIXED - usage of pointers to packed struct members should trigger warning"
href="https://llvm.org/bugs/show_bug.cgi?id=22821">bug 22821</a>
from <span class="vcard"><a class="email" href="mailto:roger.ferreribanez@arm.com" title="Roger Ferrer Ibanez <roger.ferreribanez@arm.com>"> <span class="fn">Roger Ferrer Ibanez</span></a>
</span></b>
<pre>clang does not accept #pragma pack but instead uses __attribute__((packed)).
The example above could be rewritten as
#include <stdio.h>
typedef struct __attribute__((packed)) A { int v; } unaligned;
void print(int *x) { printf("%d\n", *x); }
void test1(unaligned *p) { print(&(p->v)); }
void test2(unaligned *p) {
int *x = &(p->v);
printf("%d\n", *x);
}
As of <a href="https://reviews.llvm.org/rL278483">https://reviews.llvm.org/rL278483</a> clang diagnoses this case
clang -c prova.c -Wall
prova.c:5:36: warning: taking address of packed member 'v' of class or
structure 'A' may result in an unaligned pointer value
[-Waddress-of-packed-member]
void test1(unaligned *p) { print(&(p->v)); }
^~~~
prova.c:7:14: warning: taking address of packed member 'v' of class or
structure 'A' may result in an unaligned pointer value
[-Waddress-of-packed-member]
int *x = &(p->v);
^~~~
2 warnings generated.
So I think we can consider this ticket as fixed</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>