Re: V10 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-20 Thread H.J. Lu
On Thu, Dec 20, 2018 at 1:28 PM Jason Merrill wrote: > > On 12/20/18 2:52 PM, H.J. Lu wrote: > > On Thu, Dec 20, 2018 at 11:28 AM Jason Merrill wrote: > >> > >> On 12/19/18 12:35 PM, H.J. Lu wrote: > >>> + while (handled_component_p (rhs)) > >>> +{ > >>> + if (TREE_CODE (rhs) ==

Re: V10 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-20 Thread Jason Merrill
On 12/20/18 2:52 PM, H.J. Lu wrote: On Thu, Dec 20, 2018 at 11:28 AM Jason Merrill wrote: On 12/19/18 12:35 PM, H.J. Lu wrote: + while (handled_component_p (rhs)) +{ + if (TREE_CODE (rhs) == COMPONENT_REF) + break; + rhs = TREE_OPERAND (rhs, 0); +} + + if (TREE_CODE

V10 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-20 Thread H.J. Lu
*/ while (handled_component_p (rhs)) { if (TREE_CODE (rhs) == COMPONENT_REF) { tree field = TREE_OPERAND (rhs, 1); context = check_alignment_of_packed_member (type, field); if (context) break; } rhs = TREE_OPERAND (rhs, 0); }

Re: V9 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-20 Thread Jason Merrill
On 12/19/18 12:35 PM, H.J. Lu wrote: + while (handled_component_p (rhs)) +{ + if (TREE_CODE (rhs) == COMPONENT_REF) + break; + rhs = TREE_OPERAND (rhs, 0); +} + + if (TREE_CODE (rhs) != COMPONENT_REF) +return NULL_TREE; + + object = TREE_OPERAND (rhs, 0); + field

V9 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-19 Thread H.J. Lu
: (q2 ? (*q1 = >i, *q2 = 2, >i): q2); > } > [hjl@gnu-cfl-1 pr51628-5]$ > /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc > -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 > -S c.i > c.i: In function \u2018foo3\u2019: > c.i:8:20: warn

Re: V8 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-19 Thread H.J. Lu
On Tue, Dec 18, 2018 at 7:19 PM Sandra Loosemore wrote: > > On 12/18/18 2:12 PM, H.J. Lu wrote: > > > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > > index ac2ee59d92c..47f2fc3f518 100644 > > --- a/gcc/doc/invoke.texi > > +++ b/gcc/doc/invoke.texi > > @@ -358,6 +358,7 @@ Objective-C

Re: V8 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-19 Thread H.J. Lu
On Tue, Dec 18, 2018 at 2:14 PM Jason Merrill wrote: > > On 12/18/18 4:12 PM, H.J. Lu wrote: > > On Tue, Dec 18, 2018 at 12:36 PM Jason Merrill wrote: > >> > >> On 12/18/18 9:10 AM, H.J. Lu wrote: > >>> + switch (TREE_CODE (rhs)) > >>> +{ > >>> +case ADDR_EXPR: > >>> + base =

Re: V8 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-18 Thread Sandra Loosemore
On 12/18/18 2:12 PM, H.J. Lu wrote: diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index ac2ee59d92c..47f2fc3f518 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -358,6 +358,7 @@ Objective-C and Objective-C++ Dialects}. -Wuseless-cast -Wvariadic-macros

Re: V8 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-18 Thread Jason Merrill
On 12/18/18 4:12 PM, H.J. Lu wrote: On Tue, Dec 18, 2018 at 12:36 PM Jason Merrill wrote: On 12/18/18 9:10 AM, H.J. Lu wrote: + switch (TREE_CODE (rhs)) +{ +case ADDR_EXPR: + base = TREE_OPERAND (rhs, 0); + while (handled_component_p (base)) + { + if (TREE_CODE

V8 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-18 Thread H.J. Lu
? (*q2 = 2, >i): q2); | ^~ c.i:8:51: warning: taking address of packed member of ‘struct A’ may result in an unaligned pointer value [-Waddress-of-packed-member] 8 | return q1 ? (*q1 = 1, >i) : (q2 ? (*q2 = 2, >i): q2); |

Re: V7 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-18 Thread Jason Merrill
On 12/18/18 9:10 AM, H.J. Lu wrote: + switch (TREE_CODE (rhs)) +{ +case ADDR_EXPR: + base = TREE_OPERAND (rhs, 0); + while (handled_component_p (base)) + { + if (TREE_CODE (base) == COMPONENT_REF) + break; + base = TREE_OPERAND (base, 0); +

V7 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-18 Thread H.J. Lu
On Mon, Dec 17, 2018 at 08:53:32AM -0500, Jason Merrill wrote: > On 12/17/18 7:42 AM, H.J. Lu wrote: > > On Mon, Dec 17, 2018 at 1:39 AM Richard Biener > > wrote: > > > > > > On Fri, Dec 14, 2018 at 11:48 PM H.J. Lu wrote: > > > > > > > > On Fri, Dec 14, 2018 at 2:10 PM Jason Merrill wrote: >

Re: V6 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-17 Thread Jason Merrill
On 12/17/18 7:42 AM, H.J. Lu wrote: On Mon, Dec 17, 2018 at 1:39 AM Richard Biener wrote: On Fri, Dec 14, 2018 at 11:48 PM H.J. Lu wrote: On Fri, Dec 14, 2018 at 2:10 PM Jason Merrill wrote: On 12/13/18 6:56 PM, H.J. Lu wrote: On Thu, Dec 13, 2018 at 12:50 PM Jason Merrill wrote: On

Re: V6 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-17 Thread Richard Biener
On Mon, Dec 17, 2018 at 1:43 PM H.J. Lu wrote: > > On Mon, Dec 17, 2018 at 1:39 AM Richard Biener > wrote: > > > > On Fri, Dec 14, 2018 at 11:48 PM H.J. Lu wrote: > > > > > > On Fri, Dec 14, 2018 at 2:10 PM Jason Merrill wrote: > > > > > > > > On 12/13/18 6:56 PM, H.J. Lu wrote: > > > > > On

Re: V6 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-17 Thread H.J. Lu
On Mon, Dec 17, 2018 at 1:39 AM Richard Biener wrote: > > On Fri, Dec 14, 2018 at 11:48 PM H.J. Lu wrote: > > > > On Fri, Dec 14, 2018 at 2:10 PM Jason Merrill wrote: > > > > > > On 12/13/18 6:56 PM, H.J. Lu wrote: > > > > On Thu, Dec 13, 2018 at 12:50 PM Jason Merrill wrote: > > > >> > > > >>

Re: V6 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-17 Thread Richard Biener
On Fri, Dec 14, 2018 at 11:48 PM H.J. Lu wrote: > > On Fri, Dec 14, 2018 at 2:10 PM Jason Merrill wrote: > > > > On 12/13/18 6:56 PM, H.J. Lu wrote: > > > On Thu, Dec 13, 2018 at 12:50 PM Jason Merrill wrote: > > >> > > >> On 9/25/18 11:46 AM, H.J. Lu wrote: > > >>> On Fri, Aug 31, 2018 at 2:04

V6 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-14 Thread H.J. Lu
(i); > >> > >> You may get VIEW_CONVERT_EXPR with location wrappers. > > > > Fixed. I replaced gcc_unreachable with return NULL_TREE; > > Then we're back to my earlier question: are you deliberately not > handling the other cases? Why not look through them as well?

Re: V5 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-14 Thread Jason Merrill
On 12/13/18 6:56 PM, H.J. Lu wrote: On Thu, Dec 13, 2018 at 12:50 PM Jason Merrill wrote: On 9/25/18 11:46 AM, H.J. Lu wrote: On Fri, Aug 31, 2018 at 2:04 PM, Jason Merrill wrote: On 07/23/2018 05:24 PM, H.J. Lu wrote: On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers wrote: On Mon, 18

V5 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-13 Thread H.J. Lu
ld-x86_64-linux/gcc/xgcc > > -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 > > -S x.i > > x.i: In function ‘g8’: > > x.i:7:25: warning: taking address of packed member of ‘struct A’ may > > result in an unaligned pointer value [-Waddress-of-packed

Re: V4 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-12-13 Thread Jason Merrill
On 9/25/18 11:46 AM, H.J. Lu wrote: On Fri, Aug 31, 2018 at 2:04 PM, Jason Merrill wrote: On 07/23/2018 05:24 PM, H.J. Lu wrote: On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers wrote: On Mon, 18 Jun 2018, Jason Merrill wrote: On Mon, Jun 18, 2018 at 11:59 AM, Joseph Myers wrote: On

PING^2: V4 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-11-25 Thread H.J. Lu
On Sun, Nov 4, 2018 at 7:16 AM H.J. Lu wrote: > > On Tue, Sep 25, 2018 at 8:46 AM H.J. Lu wrote: > > > > On Fri, Aug 31, 2018 at 2:04 PM, Jason Merrill wrote: > > > On 07/23/2018 05:24 PM, H.J. Lu wrote: > > >> > > >> On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers > > >> wrote: > > >>> > > >>>

PING: V4 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-11-04 Thread H.J. Lu
On Tue, Sep 25, 2018 at 8:46 AM H.J. Lu wrote: > > On Fri, Aug 31, 2018 at 2:04 PM, Jason Merrill wrote: > > On 07/23/2018 05:24 PM, H.J. Lu wrote: > >> > >> On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers > >> wrote: > >>> > >>> On Mon, 18 Jun 2018, Jason Merrill wrote: > >>> > On Mon, Jun

V4 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-09-25 Thread H.J. Lu
NOP_EXPR. This comes from convert_for_assignment in c/c-typeck.c. For other compatible pointer assignment, address_p is true and rhs is ADDR_EXPR, PARM_DECL, VAR_DECL or NOP_EXPR. Check for ADDR_EXPR won't work. address_p isn't an appropriate parameter name. I changed it to convert_p to

Re: V3 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-08-31 Thread Jason Merrill
On 07/23/2018 05:24 PM, H.J. Lu wrote: On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers wrote: On Mon, 18 Jun 2018, Jason Merrill wrote: On Mon, Jun 18, 2018 at 11:59 AM, Joseph Myers wrote: On Mon, 18 Jun 2018, Jason Merrill wrote: + if (TREE_CODE (rhs) == COND_EXPR) +{ + /*

PING^1: V3 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-08-20 Thread H.J. Lu
On Mon, Jul 23, 2018 at 2:24 PM, H.J. Lu wrote: > On Mon, Jun 18, 2018 at 12:26 PM, Joseph Myers > wrote: >> On Mon, 18 Jun 2018, Jason Merrill wrote: >> >>> On Mon, Jun 18, 2018 at 11:59 AM, Joseph Myers >>> wrote: >>> > On Mon, 18 Jun 2018, Jason Merrill wrote: >>> > >>> >> > + if

V3 [PATCH] C/C++: Add -Waddress-of-packed-member

2018-07-23 Thread H.J. Lu
or_pointer_of_packed_member and warn_for_address_of_packed_member into warn_for_address_or_pointer_of_packed_member. Tested on Linux/x86-64 and Linux/i686. OK for trunk. Thanks. -- H.J. From 2ddae2d57d2875e80c9186b281edfabfddb42e86 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 12 Jan 2018 21:12:05 -0800 Subject: [PAT

Re: PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-17 Thread H.J. Lu
On Mon, May 14, 2018 at 8:00 PM, Martin Sebor wrote: > On 05/14/2018 01:10 PM, H.J. Lu wrote: >> >> On Mon, May 14, 2018 at 10:40 AM, H.J. Lu wrote: >> >> $ cat c.i >> struct B { int i; }; >> struct C { struct B b; } __attribute__ ((packed));

Re: PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-14 Thread Martin Sebor
On 05/14/2018 01:10 PM, H.J. Lu wrote: On Mon, May 14, 2018 at 10:40 AM, H.J. Lu wrote: $ cat c.i struct B { int i; }; struct C { struct B b; } __attribute__ ((packed)); long* g8 (struct C *p) { return p; } $ gcc -O2 -S c.i -Wno-incompatible-pointer-types c.i: In

Re: PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-14 Thread H.J. Lu
On Mon, May 14, 2018 at 10:40 AM, H.J. Lu wrote: $ cat c.i struct B { int i; }; struct C { struct B b; } __attribute__ ((packed)); long* g8 (struct C *p) { return p; } $ gcc -O2 -S c.i -Wno-incompatible-pointer-types c.i: In function ‘g8’:

Re: PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-14 Thread H.J. Lu
On Mon, May 14, 2018 at 9:18 AM, Martin Sebor wrote: > On 05/14/2018 07:44 AM, H.J. Lu wrote: >> >> On Wed, Apr 25, 2018 at 7:54 PM, H.J. Lu wrote: >>> >>> When address of packed member of struct or union is taken, it may result >>> in an unaligned pointer

Re: PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-14 Thread Martin Sebor
On 05/14/2018 07:44 AM, H.J. Lu wrote: On Wed, Apr 25, 2018 at 7:54 PM, H.J. Lu wrote: When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to check alignment at pointer

PING^1: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-05-14 Thread H.J. Lu
On Wed, Apr 25, 2018 at 7:54 PM, H.J. Lu wrote: > When address of packed member of struct or union is taken, it may result > in an unaligned pointer value. This patch adds -Waddress-of-packed-member > to check alignment at pointer assignment and warn unaligned address as >

[PATCH] C/C++: Add -Waddress-of-packed-member

2018-04-25 Thread H.J. Lu
When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to check alignment at pointer assignment and warn unaligned address as well as unaligned pointer: $ cat x.i struct pair_t { char c; int i; }

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-20 Thread H.J. Lu
ct A *p) > { > return p->i; > } > > we shouldn't warn: > > [hjl@gnu-tools-1 pr51628]$ cat a1.i > struct A { > int i; > } __attribute__ ((packed)); > > int f (struct A *p) > { > return *>i; > } > [hjl@gnu-tools-1 pr51628]$ > > There is no unaligned load

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-20 Thread H.J. Lu
On Sat, Jan 20, 2018 at 8:31 AM, H.J. Lu wrote: > On Fri, Jan 19, 2018 at 7:57 PM, Martin Sebor wrote: >> On 01/19/2018 10:14 AM, Martin Sebor wrote: >>> > >> After reading the Clang code review for the warning >> (https://reviews.llvm.org/D20561) and

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-20 Thread H.J. Lu
} [hjl@gnu-tools-1 pr51628]$ make r1.s /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -S r1.ii r1.ii: In function ‘int* g(A&)’: r1.ii:7:15: error: cannot bind packed field ‘r.A::i’ to ‘int&’ int = r.i; // missing warning here

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-19 Thread Martin Sebor
On 01/19/2018 10:14 AM, Martin Sebor wrote: On 01/14/2018 07:29 AM, H.J. Lu wrote: When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to warn it: $ cat x.i struct pair_t { char c; int i; }

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-19 Thread Martin Sebor
On 01/14/2018 07:29 AM, H.J. Lu wrote: When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to warn it: $ cat x.i struct pair_t { char c; int i; } __attribute__ ((packed)); extern struct pair_t

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-17 Thread H.J. Lu
ecking the expected alignment against the field alignment. -- H.J. From 54b68f11c18971d1371d5bb5bde7b0c1d3e6ee7b Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Fri, 12 Jan 2018 21:12:05 -0800 Subject: [PATCH] C/C++: Add -Waddress-of-packed-member

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-15 Thread H.J. Lu
tion wrapper. OK for trunk? -- H.J. From 2a26ed809f7af5f52a24367bfa0b29898ac7fa87 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Fri, 12 Jan 2018 21:12:05 -0800 Subject: [PATCH] C/C++: Add -Waddress-of-packed-member When address of packed member of struct

Re: [PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-15 Thread Jakub Jelinek
On Sun, Jan 14, 2018 at 06:29:54AM -0800, H.J. Lu wrote: > + if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field)) > + { > + tree field_type = TREE_TYPE (field); > + unsigned int type_align = TYPE_ALIGN (field_type); > + tree context = DECL_CONTEXT

[PATCH] C/C++: Add -Waddress-of-packed-member

2018-01-14 Thread H.J. Lu
When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to warn it: $ cat x.i struct pair_t { char c; int i; } __attribute__ ((packed)); extern struct pair_t p; int *addr = $ gcc -O2 -S x.i x.i:8:13: