Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Jan 2018 15:55:31 -0800 (PST)
From:      Don Lewis <truckman@FreeBSD.org>
To:        cem@freebsd.org
Cc:        "Rodney W. Grimes" <rgrimes@freebsd.org>, src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r328159 - head/sys/modules
Message-ID:  <tkrat.a8bb488b61eec3e0@FreeBSD.org>
In-Reply-To: <CAG6CVpUj3SfiuHAaPMB1zGXpXPw=U-CsHgk%2BivEPyrzhvrrPKw@mail.gmail.com>
References:  <CAG6CVpV6Suft3v-=08f5UH6BTH2NEJgU_4kYd-UphLZ6yoJB4Q@mail.gmail.com> <201801191737.w0JHbM90073097@pdx.rh.CN85.dnsmgr.net> <CAG6CVpUj3SfiuHAaPMB1zGXpXPw=U-CsHgk%2BivEPyrzhvrrPKw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 19 Jan, Conrad Meyer wrote:
> On Fri, Jan 19, 2018 at 9:37 AM, Rodney W. Grimes
> <freebsd@pdx.rh.cn85.dnsmgr.net> wrote:
>> If you think in assembler it is easy to understand why this is UB,
>> most (all) architectures Right Logic or Arithmetic Shift only accept an
>> operand that is a size that can hold log2(wordsize).
> 
> This is a logical right shift by a constant larger than the width of
> the left operand.  As a result, it would a constant zero in any
> emitted machine code.  It is a bug in the C standard and a concession
> to naive, non-optimizing compilers that this is considered UB.

Generating one answer when compiler knows that everything is constant
and can figure out the "correct" value at compile time, but generating
an entirely different answer when the shift value is still constant, but
passed in as a function parameter and hides that information from the
compiler so the result is generated at runtime sounds like a good way to
introduce bugs.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?tkrat.a8bb488b61eec3e0>