* Compiler warnings in dispnew.c [not found] <87fsrg7gdt.fsf.ref@yahoo.com> @ 2021-11-28 9:56 ` Po Lu 2021-11-28 10:48 ` Eli Zaretskii 0 siblings, 1 reply; 14+ messages in thread From: Po Lu @ 2021-11-28 9:56 UTC (permalink / raw) To: emacs-devel Building with checking, I get: CC dispnew.o In function ‘copy_row_except_pointers’, inlined from ‘assign_row’ at dispnew.c:1050:3, inlined from ‘mirror_make_current’ at dispnew.c:2761:3: dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘current_row’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] 1037 | memcpy (&to->x, &from->x, sizeof *to - off); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from termchar.h:23, from dispnew.c:28: dispnew.c: In function ‘mirror_make_current’: dispextern.h:885:7: note: subobject ‘x’ declared here 885 | int x, y; | ^ In function ‘copy_row_except_pointers’, inlined from ‘assign_row’ at dispnew.c:1050:3, inlined from ‘make_current’ at dispnew.c:2719:3: dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘current_row’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] 1037 | memcpy (&to->x, &from->x, sizeof *to - off); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from termchar.h:23, from dispnew.c:28: dispnew.c: In function ‘make_current’: dispextern.h:885:7: note: subobject ‘x’ declared here 885 | int x, y; | ^ In function ‘copy_row_except_pointers’, inlined from ‘assign_row’ at dispnew.c:1050:3, inlined from ‘scrolling_window’ at dispnew.c:4445:4, inlined from ‘update_window’ at dispnew.c:3651:13: dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘c’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] 1037 | memcpy (&to->x, &from->x, sizeof *to - off); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from termchar.h:23, from dispnew.c:28: dispnew.c: In function ‘update_window’: dispextern.h:885:7: note: subobject ‘x’ declared here 885 | int x, y; | ^ In function ‘copy_row_except_pointers’, inlined from ‘assign_row’ at dispnew.c:1050:3, inlined from ‘scrolling_window’ at dispnew.c:4768:6, inlined from ‘update_window’ at dispnew.c:3651:13: dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘to’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] 1037 | memcpy (&to->x, &from->x, sizeof *to - off); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from termchar.h:23, from dispnew.c:28: dispnew.c: In function ‘update_window’: dispextern.h:885:7: note: subobject ‘x’ declared here 885 | int x, y; I think it would be prudent to fix this, thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 9:56 ` Compiler warnings in dispnew.c Po Lu @ 2021-11-28 10:48 ` Eli Zaretskii 2021-11-28 10:57 ` Andreas Schwab ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Eli Zaretskii @ 2021-11-28 10:48 UTC (permalink / raw) To: Po Lu; +Cc: emacs-devel > From: Po Lu <luangruo@yahoo.com> > Date: Sun, 28 Nov 2021 17:56:30 +0800 > > Building with checking, I get: > > CC dispnew.o > In function ‘copy_row_except_pointers’, > inlined from ‘assign_row’ at dispnew.c:1050:3, > inlined from ‘mirror_make_current’ at dispnew.c:2761:3: > dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘current_row’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] > 1037 | memcpy (&to->x, &from->x, sizeof *to - off); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > In file included from termchar.h:23, > from dispnew.c:28: > dispnew.c: In function ‘mirror_make_current’: > dispextern.h:885:7: note: subobject ‘x’ declared here > 885 | int x, y; > | ^ > > I think it would be prudent to fix this, thanks. Do you understand the problem? It looks like a compiler bug to me. We copy into the address of glyph_row->x and the size of the copy is the size of glyph_row structure minus the offset of x from the beginning. So what is wrong with that? what am I missing? When you say "building with checking", what do you mean, exactly? Did you use some non-default warning switches, and if so, which ones? And what version of GCC is that? ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 10:48 ` Eli Zaretskii @ 2021-11-28 10:57 ` Andreas Schwab 2021-11-28 11:02 ` Po Lu 2021-11-28 11:03 ` Eli Zaretskii 2 siblings, 0 replies; 14+ messages in thread From: Andreas Schwab @ 2021-11-28 10:57 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Po Lu, emacs-devel On Nov 28 2021, Eli Zaretskii wrote: > Do you understand the problem? It looks like a compiler bug to me. > We copy into the address of glyph_row->x and the size of the copy is > the size of glyph_row structure minus the offset of x from the > beginning. So what is wrong with that? what am I missing? It is copying beyond the object that is glyph_row->x. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 10:48 ` Eli Zaretskii 2021-11-28 10:57 ` Andreas Schwab @ 2021-11-28 11:02 ` Po Lu 2021-11-28 11:07 ` Andreas Schwab 2021-11-28 11:03 ` Eli Zaretskii 2 siblings, 1 reply; 14+ messages in thread From: Po Lu @ 2021-11-28 11:02 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Po Lu <luangruo@yahoo.com> >> Date: Sun, 28 Nov 2021 17:56:30 +0800 >> >> Building with checking, I get: >> >> CC dispnew.o >> In function ‘copy_row_except_pointers’, >> inlined from ‘assign_row’ at dispnew.c:1050:3, >> inlined from ‘mirror_make_current’ at dispnew.c:2761:3: >> dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘current_row’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] >> 1037 | memcpy (&to->x, &from->x, sizeof *to - off); >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> In file included from termchar.h:23, >> from dispnew.c:28: >> dispnew.c: In function ‘mirror_make_current’: >> dispextern.h:885:7: note: subobject ‘x’ declared here >> 885 | int x, y; >> | ^ >> >> I think it would be prudent to fix this, thanks. > Do you understand the problem? It looks like a compiler bug to me. > We copy into the address of glyph_row->x and the size of the copy is > the size of glyph_row structure minus the offset of x from the > beginning. So what is wrong with that? what am I missing? I don't see anything wrong with it, but I think someone has to find a way to silence the warning. I could not find some reasonable way to do so that did not involve #pragma GCC, which I think is not allowed in Emacs code (is that correct?) Thanks. > When you say "building with checking", what do you mean, exactly? Did > you use some non-default warning switches, and if so, which ones? I meant to say with '--enable-checking="yes,glyphs"'. > And what version of GCC is that? It's GCC 11.2.1. Thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:02 ` Po Lu @ 2021-11-28 11:07 ` Andreas Schwab 2021-11-28 15:29 ` Eli Zaretskii 2021-11-29 17:49 ` Stefan Monnier 0 siblings, 2 replies; 14+ messages in thread From: Andreas Schwab @ 2021-11-28 11:07 UTC (permalink / raw) To: Po Lu; +Cc: Eli Zaretskii, emacs-devel Does that work? diff --git a/src/dispnew.c b/src/dispnew.c index f3f110a8f2..a976bf94c5 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1034,7 +1034,7 @@ copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) { enum { off = offsetof (struct glyph_row, x) }; - memcpy (&to->x, &from->x, sizeof *to - off); + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); } Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:07 ` Andreas Schwab @ 2021-11-28 15:29 ` Eli Zaretskii 2021-11-29 0:35 ` Po Lu 2021-11-29 17:49 ` Stefan Monnier 1 sibling, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2021-11-28 15:29 UTC (permalink / raw) To: luangruo; +Cc: Andreas Schwab, emacs-devel > From: Andreas Schwab <schwab@linux-m68k.org> > Date: Sun, 28 Nov 2021 12:07:01 +0100 > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org > > Does that work? > > diff --git a/src/dispnew.c b/src/dispnew.c > index f3f110a8f2..a976bf94c5 100644 > --- a/src/dispnew.c > +++ b/src/dispnew.c > @@ -1034,7 +1034,7 @@ copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) > { > enum { off = offsetof (struct glyph_row, x) }; > > - memcpy (&to->x, &from->x, sizeof *to - off); > + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); > } Po Lu, please try this and tell if the warning goes away. Thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 15:29 ` Eli Zaretskii @ 2021-11-29 0:35 ` Po Lu 0 siblings, 0 replies; 14+ messages in thread From: Po Lu @ 2021-11-29 0:35 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Andreas Schwab, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Andreas Schwab <schwab@linux-m68k.org> >> Date: Sun, 28 Nov 2021 12:07:01 +0100 >> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org >> >> Does that work? >> >> diff --git a/src/dispnew.c b/src/dispnew.c >> index f3f110a8f2..a976bf94c5 100644 >> --- a/src/dispnew.c >> +++ b/src/dispnew.c >> @@ -1034,7 +1034,7 @@ copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) >> { >> enum { off = offsetof (struct glyph_row, x) }; >> >> - memcpy (&to->x, &from->x, sizeof *to - off); >> + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); >> } > > Po Lu, please try this and tell if the warning goes away. > > Thanks. Yes, this makes it go away. Thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:07 ` Andreas Schwab 2021-11-28 15:29 ` Eli Zaretskii @ 2021-11-29 17:49 ` Stefan Monnier 2021-11-29 17:53 ` Andreas Schwab 1 sibling, 1 reply; 14+ messages in thread From: Stefan Monnier @ 2021-11-29 17:49 UTC (permalink / raw) To: Andreas Schwab; +Cc: Po Lu, Eli Zaretskii, emacs-devel Andreas Schwab [2021-11-28 12:07:01] wrote: > - memcpy (&to->x, &from->x, sizeof *to - off); > + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); I wonder: is the (char*) cast sufficient or is it necessary to "obfuscate" the code by writing `to + off` instead of `&to->x`? [ By "obfuscate" I mean here to hide from the compiler, rather than from humans, because I'm not sure which of the two is more clear to a human, here. ] Stefan ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-29 17:49 ` Stefan Monnier @ 2021-11-29 17:53 ` Andreas Schwab 0 siblings, 0 replies; 14+ messages in thread From: Andreas Schwab @ 2021-11-29 17:53 UTC (permalink / raw) To: Stefan Monnier; +Cc: Po Lu, Eli Zaretskii, emacs-devel On Nov 29 2021, Stefan Monnier wrote: > Andreas Schwab [2021-11-28 12:07:01] wrote: >> - memcpy (&to->x, &from->x, sizeof *to - off); >> + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); > > I wonder: is the (char*) cast sufficient or is it necessary to > "obfuscate" the code by writing `to + off` instead of `&to->x`? I think the point is that the address expression is not based on the subobject. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 10:48 ` Eli Zaretskii 2021-11-28 10:57 ` Andreas Schwab 2021-11-28 11:02 ` Po Lu @ 2021-11-28 11:03 ` Eli Zaretskii 2021-11-28 11:10 ` Andreas Schwab 2021-11-28 11:11 ` Po Lu 2 siblings, 2 replies; 14+ messages in thread From: Eli Zaretskii @ 2021-11-28 11:03 UTC (permalink / raw) To: luangruo; +Cc: emacs-devel > Date: Sun, 28 Nov 2021 12:48:00 +0200 > From: Eli Zaretskii <eliz@gnu.org> > Cc: emacs-devel@gnu.org > > > From: Po Lu <luangruo@yahoo.com> > > Date: Sun, 28 Nov 2021 17:56:30 +0800 > > > > Building with checking, I get: > > > > CC dispnew.o > > In function ‘copy_row_except_pointers’, > > inlined from ‘assign_row’ at dispnew.c:1050:3, > > inlined from ‘mirror_make_current’ at dispnew.c:2761:3: > > dispnew.c:1037:3: warning: ‘memcpy’ offset [48, 255] from the object at ‘current_row’ is out of the bounds of referenced subobject ‘x’ with type ‘int’ at offset 44 [-Warray-bounds] I don't understand the data the compiler prints, specifically why it says "offset [48, 255]" and then "at offset 44". If you put a breakpoint at line 2761 of mirror_make_current, and when it breaks, type (gdb) ptype /o current_row (gdb) ptype /o desired_row what do you see in offsets of x and in the total size of the structure? (Note: to hit the breakpoint, you need to invoke "emacs -Q -nw", the "-nw" part is important.) ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:03 ` Eli Zaretskii @ 2021-11-28 11:10 ` Andreas Schwab 2021-11-28 11:18 ` Eli Zaretskii 2021-11-28 11:11 ` Po Lu 1 sibling, 1 reply; 14+ messages in thread From: Andreas Schwab @ 2021-11-28 11:10 UTC (permalink / raw) To: Eli Zaretskii; +Cc: luangruo, emacs-devel On Nov 28 2021, Eli Zaretskii wrote: > I don't understand the data the compiler prints, specifically why it > says "offset [48, 255]" and then "at offset 44". 48 is the first offset that is out of range, 44 is the offset of x (thus 44 + 4 is outside of it). Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:10 ` Andreas Schwab @ 2021-11-28 11:18 ` Eli Zaretskii 2021-11-28 11:44 ` Andreas Schwab 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2021-11-28 11:18 UTC (permalink / raw) To: Andreas Schwab; +Cc: luangruo, emacs-devel > From: Andreas Schwab <schwab@linux-m68k.org> > Cc: luangruo@yahoo.com, emacs-devel@gnu.org > Date: Sun, 28 Nov 2021 12:10:15 +0100 > > On Nov 28 2021, Eli Zaretskii wrote: > > > I don't understand the data the compiler prints, specifically why it > > says "offset [48, 255]" and then "at offset 44". > > 48 is the first offset that is out of range, 44 is the offset of x (thus > 44 + 4 is outside of it). Silly compiler. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:18 ` Eli Zaretskii @ 2021-11-28 11:44 ` Andreas Schwab 0 siblings, 0 replies; 14+ messages in thread From: Andreas Schwab @ 2021-11-28 11:44 UTC (permalink / raw) To: Eli Zaretskii; +Cc: luangruo, emacs-devel On Nov 28 2021, Eli Zaretskii wrote: >> From: Andreas Schwab <schwab@linux-m68k.org> >> Cc: luangruo@yahoo.com, emacs-devel@gnu.org >> Date: Sun, 28 Nov 2021 12:10:15 +0100 >> >> On Nov 28 2021, Eli Zaretskii wrote: >> >> > I don't understand the data the compiler prints, specifically why it >> > says "offset [48, 255]" and then "at offset 44". >> >> 48 is the first offset that is out of range, 44 is the offset of x (thus >> 44 + 4 is outside of it). > > Silly compiler. Nope. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Compiler warnings in dispnew.c 2021-11-28 11:03 ` Eli Zaretskii 2021-11-28 11:10 ` Andreas Schwab @ 2021-11-28 11:11 ` Po Lu 1 sibling, 0 replies; 14+ messages in thread From: Po Lu @ 2021-11-28 11:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > (gdb) ptype /o current_row > (gdb) ptype /o desired_row > > what do you see in offsets of x and in the total size of the > structure? The offset of x is 44. The total size of the size of the structure is 256. Thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-11-29 17:53 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <87fsrg7gdt.fsf.ref@yahoo.com> 2021-11-28 9:56 ` Compiler warnings in dispnew.c Po Lu 2021-11-28 10:48 ` Eli Zaretskii 2021-11-28 10:57 ` Andreas Schwab 2021-11-28 11:02 ` Po Lu 2021-11-28 11:07 ` Andreas Schwab 2021-11-28 15:29 ` Eli Zaretskii 2021-11-29 0:35 ` Po Lu 2021-11-29 17:49 ` Stefan Monnier 2021-11-29 17:53 ` Andreas Schwab 2021-11-28 11:03 ` Eli Zaretskii 2021-11-28 11:10 ` Andreas Schwab 2021-11-28 11:18 ` Eli Zaretskii 2021-11-28 11:44 ` Andreas Schwab 2021-11-28 11:11 ` Po Lu
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.