Thread: Clang 3.3 findings and Illegal Shifts

Clang 3.3 findings and Illegal Shifts

From
Jeffrey Walton
Date:
Here are Clang 3.3 findings regarding illegal shifts. The code will be
subject to removal by the compiler and optimizer (and linker if LTO is
used).

The recipe used to produce the findings is below.

*****

$ /usr/local/bin/clang -v
clang version 3.3 (tags/RELEASE_33/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

*****

make distclean

export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
export CFLAGS="-g3 -fsanitize=undefined"
export CXXFLAGS="-g3 -fsanitize=undefined -fno-sanitize=vptr"

./configure

make

make check

*****

...
creating directory
/home/jwalton/Desktop/postgresql-9.3.1/src/test/regress/./tmp_check/data
... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
creating configuration files ... localtime.c:127:20: runtime error:
left shift of negative value -1
ok
creating template1 database in
/home/jwalton/postgresql-9.3.1/src/test/regress/./tmp_check/data/base/1
... localtime.c:127:20: runtime error: left shift of negative value -1
relmapper.c:670:2: runtime error: left shift of negative value -1
ok
initializing pg_authid ... localtime.c:127:20: runtime error: left
shift of negative value -1
ok
initializing dependencies ... localtime.c:127:20: runtime error: left
shift of negative value -1
ok
creating system views ... localtime.c:127:20: runtime error: left
shift of negative value -1
ok
loading system objects' descriptions ... localtime.c:127:20: runtime
error: left shift of negative value -1
ok
creating collations ... localtime.c:127:20: runtime error: left shift
of negative value -1
ok
creating conversions ... localtime.c:127:20: runtime error: left shift
of negative value -1
ok
creating dictionaries ... localtime.c:127:20: runtime error: left
shift of negative value -1
ok
setting privileges on built-in objects ... localtime.c:127:20: runtime
error: left shift of negative value -1
ok
creating information schema ... localtime.c:127:20: runtime error:
left shift of negative value -1
localtime.c:127:20: runtime error: left shift of negative value -1
ok
loading PL/pgSQL server-side language ... localtime.c:127:20: runtime
error: left shift of negative value -1
ok
vacuuming database template1 ... localtime.c:127:20: runtime error:
left shift of negative value -1
pg_lzcompress.c:601:5: runtime error: left shift of negative value -68
pg_lzcompress.c:601:5: runtime error: left shift of negative value -68
pg_lzcompress.c:385:16: runtime error: left shift of negative value -68
pg_lzcompress.c:615:4: runtime error: left shift of negative value -68
pg_lzcompress.c:385:16: runtime error: left shift of negative value -37
pg_lzcompress.c:615:4: runtime error: left shift of negative value -37
pg_lzcompress.c:385:16: runtime error: left shift of negative value -37
pg_lzcompress.c:615:4: runtime error: left shift of negative value -37
pg_lzcompress.c:601:5: runtime error: left shift of negative value -37
inval.c:524:39: runtime error: left shift of negative value -1
relmapper.c:670:2: runtime error: left shift of negative value -1
ok
copying template1 to template0 ... localtime.c:127:20: runtime error:
left shift of negative value -1
relmapper.c:670:2: runtime error: left shift of negative value -1
inval.c:524:39: runtime error: left shift of negative value -1
ok
copying template1 to postgres ... localtime.c:127:20: runtime error:
left shift of negative value -1
ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Sync to disk skipped.
The data directory might become corrupt if the operating system crashes.

Success. You can now start the database server using:
...

Re: Clang 3.3 findings and Illegal Shifts

From
Andres Freund
Date:
On 2013-11-12 19:58:31 -0500, Jeffrey Walton wrote:
> Here are Clang 3.3 findings regarding illegal shifts. The code will be
> subject to removal by the compiler and optimizer (and linker if LTO is
> used).

> /home/jwalton/postgresql-9.3.1/src/test/regress/./tmp_check/data/base/1
> ... localtime.c:127:20: runtime error: left shift of negative value -1

Those all seem to be runtime errors, so they aren't likely to be removed
by the compiler. That's not to say they shouldn't be looked at though.

Greetings,

Andres Freund

Re: Clang 3.3 findings and Illegal Shifts

From
Kevin Grittner
Date:
Andres Freund <andres@2ndquadrant.com> wrote:
> On 2013-11-12 19:58:31 -0500, Jeffrey Walton wrote:

>> Here are Clang 3.3 findings regarding illegal shifts. The code
>> will be subject to removal by the compiler and optimizer (and
>> linker if LTO is used).

> Those all seem to be runtime errors, so they aren't likely to be
> removed by the compiler. That's not to say they shouldn't be
> looked at though.

Attached are the runtime errors I got from using the clang 3.4
sanitizer with make check-world.  I poked around some web search
results and found that according to the C99 spec, these seemed to
be flagging non-portable code.  I doubt that the issue impacts any
currently-supported platforms, which is why I set it aside until I
saw this thread; but it might some day affect the ability to
support some new platform.

These runtime tests can't be considered complete because the
sanitizer chose to crash things five times when it found things it
didn't like.  What it disliked was not immediately clear to me, but
I'll attach those, too.  Four of the five are identical for the
first 20 lines in the stack trace, with similarities for a few
lines past that.  Also attached, FWIW.

--
Kevin Grittner
EDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachment