git: f2d48b5e2c3b - main - Merge commit d8a09b3a0 from openzfs git (by Ryan Libby):

Ryan Libby rlibby at FreeBSD.org
Sun Dec 27 23:03:40 UTC 2020


The branch main has been updated by rlibby:

URL: https://cgit.FreeBSD.org/src/commit/?id=f2d48b5e2c3b45850585e4d7aee324fe148afbf2

commit f2d48b5e2c3b45850585e4d7aee324fe148afbf2
Author:     Ryan Libby <rlibby at FreeBSD.org>
AuthorDate: 2020-12-27 22:33:13 +0000
Commit:     Ryan Libby <rlibby at FreeBSD.org>
CommitDate: 2020-12-27 22:33:13 +0000

    Merge commit d8a09b3a0 from openzfs git (by Ryan Libby):
    
      lua: avoid gcc -Wreturn-local-addr bug
    
      Avoid a bug with gcc's -Wreturn-local-addr warning with some
      obfuscation.  In buggy versions of gcc, if a return value is an
      expression that involves the address of a local variable, and even if
      that address is legally converted to a non-pointer type, a warning may
      be emitted and the value of the address may be replaced with zero.
      Howerver, buggy versions don't emit the warning or replace the value
      when simply returning a local variable of non-pointer type.
    
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90737
    
      Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
      Signed-off-by: Ryan Libby <rlibby at FreeBSD.org>
      Closes #11337
---
 sys/contrib/openzfs/module/lua/ldo.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/sys/contrib/openzfs/module/lua/ldo.c b/sys/contrib/openzfs/module/lua/ldo.c
index 0344a29fd8e8..474fe659bcef 100644
--- a/sys/contrib/openzfs/module/lua/ldo.c
+++ b/sys/contrib/openzfs/module/lua/ldo.c
@@ -33,14 +33,16 @@
 #if defined (_KERNEL) && defined(__linux__)
 #include <asm/current.h>
 static intptr_t stack_remaining(void) {
-  char local;
-  return (intptr_t)(&local - (char *)current->stack);
+  intptr_t local;
+  local = (intptr_t)&local - (intptr_t)current->stack;
+  return local;
 }
 #elif defined (_KERNEL) && defined(__FreeBSD__)
 #include <sys/pcpu.h>
 static intptr_t stack_remaining(void) {
-  char local;
-  return (intptr_t)(&local - (char *)curthread->td_kstack);
+  intptr_t local;
+  local = (intptr_t)&local - (intptr_t)curthread->td_kstack;
+  return local;
 }
 #else
 static intptr_t stack_remaining(void) {


More information about the dev-commits-src-all mailing list