public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Wei Wei <dotweiba@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: Re: [Error after setting -Og] ‘__bad_copy_from’ declared with attribute error: copy source size is too small
Date: Sat, 18 Nov 2017 03:03:12 +0000	[thread overview]
Message-ID: <20171118030312.GS21978@ZenIV.linux.org.uk> (raw)
In-Reply-To: <0CAE3975-2A0A-4BFA-916B-16D00310710E@gmail.com>

On Thu, Nov 09, 2017 at 04:02:53PM -0500, Wei Wei wrote:
> Hi all,
> 
> I get a compile time error after setting -Og when compiling for the latest GitHub version.
> I am using `make defconfig’ to get the default x86_64 config. But previously I did this in v4.4, 
> it's fine.

; cat >a.c <<'EOF'
extern void __attribute((error("1"))) f1(void);
extern void __attribute((error("2"))) f2(void);

static inline __attribute__((always_inline)) void bar(const void *addr)
{
        int sz = __builtin_object_size(addr, 0);
        if (__builtin_expect(sz >= 0, 0))
                f1();
        if (sz >= 0)
                f2();
}

void foo(int *in)
{
        bar(in);
}
EOF
; gcc -O2 -c a.c
; gcc -Og -c a.c
In function ‘bar’,
    inlined from ‘foo’ at a.c:15:2:
a.c:8:3: error: call to ‘f1’ declared with attribute error: 1
   f1();
   ^
;

Note that the call of f2() _was_ eliminated.  Wrap the condition into
__builtin_expect() and with -Og it doesn't get eliminated until too
late.  It's really brittle and dependent not just upon the _result_
of optimizations (get rid of __attribute((error())) in those and
you'll see that with -Og it compiles into
        .file   "a.c"
        .text
        .globl  foo
        .type   foo, @function
foo:
.LFB1:
        .cfi_startproc
        rep ret
        .cfi_endproc
.LFE1:
        .size   foo, .-foo
getting rid of both calls, as it ought to); it depends upon the moment
when dead code elimination happens.  -Og leaves the sucker around for
too long.  If you replace that __builtin_object_size() with -1 (which
is what it evaluates to), you'll get elimination happening early enough
even with -Og; ditto for getting rid of inlining...

      reply	other threads:[~2017-11-18  3:03 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-09 21:02 [Error after setting -Og] ‘__bad_copy_from’ declared with attribute error: copy source size is too small Wei Wei
2017-11-18  3:03 ` Al Viro [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171118030312.GS21978@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --cc=dotweiba@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox