Many thanks to Mr. J Decker. I'm glad if I've made anybody think about
that warnings. My mission is complete if it's true.

On 29.09.2017 21:58, J Decker wrote:
> On Fri, Sep 29, 2017 at 1:07 AM, Denis V. Razumovsky <t...@denis.im> wrote:
>
>> Please remove multiple warnings from compiler about optimisation,
>> variable conversion, signed overflow and many more potential errors.
>>
>> 1. Optimisation solutions from GCC:
>> If you would like to add extra warning attributes to compile SQLite with
>> gcc (and many others modern compilers) you will see the warnings about
>> pure, const and other optimisation suggestion. All those optimizations
>> can add more performance to final product due to various assembly
>> optimisations.
>>
>> Static build of the last SQLite amalgamation version 3.20.0 with gcc -03
>> optimisation which uses the following parameters:
>>  -Wsuggest-attribute=const -Wsuggest-attribute=pure
>> -Wsuggest-attribute=noreturn -Wsuggest-attribute=format
>> -Wmissing-format-attribute
>>
>> has  87 recommendations as for “pure” functions.
>>
> https://stackoverflow.com/questions/11153796/benefits-of-pure-function
> Interesting.
>
>
>> 2. Error warnings:
>>
>> With -Wall -Wextra -Wpedantic -Wshadow options we can see extra warnings
>> about potential errors as follows:
>>
>> 217 warnings “is not defined” like:
>>
>> SQLite3.c:74:5: warning: "SQLITE_4_BYTE_ALIGNED_MALLOC" is not defined
>> [-Wundef]
>>  #if SQLITE_4_BYTE_ALIGNED_MALLOC
>>      ^
>>
> that's known to evaluate as 0.  It's part of c standard.  it's just silly
> to make a warning about it.
>
>
>> 20 warnings “cast discards __attribute__((noreturn))” like:
>>
>> SQLite3.c:55734:10: warning: cast discards ‘__attribute__((noreturn))’
>> qualifier from pointer target type [-Wcast-qual]
>>    memcpy((void*)&aHdr[1], (const void*)&pWal->hdr, sizeof(WalIndexHdr));
>>
>> 768 warnings “may change the sign of the result” like:
>>
>> SQLite3.c:19330:11: warning: conversion to ‘unsigned int’ from ‘int’ may
>> change the sign of the result [-Wsign-conversion]
>>
>> 75 warnings “signed overflow” like:
>> SQLite3.c:61116:3: warning: assuming signed overflow does not occur when
>> reducing constant in comparison [-Wstrict-overflow]
>>
>> As a result I would like to recommend to build SQLite with all extra
>> warning options. In total, I have counted unbelievable 2628 warnings of
>> potential errors without any efforts from my side.
>>
>>
> As for the above... those can be catastrophic; and I'm surprised there are
> so many sign conversion warnings generated...
>
>
>> 3. How to reproduce:
>>
>> a) amalgamation SQLite version 3.20.0
>>
>> b) gcc version:
>> $ gcc -v
>> Using built-in specs.
>> COLLECT_GCC=gcc
>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
>> Target: x86_64-linux-gnu
>> Configured with: ../src/configure -v --with-pkgversion='Ubuntu
>> 5.4.0-6ubuntu1~16.04.4'
>> --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs
>> --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++
>> --prefix=/usr --program-suffix=-5 --enable-shared
>> --enable-linker-build-id --libexecdir=/usr/lib
>> --without-included-gettext --enable-threads=posix --libdir=/usr/lib
>> --enable-nls --with-sysroot=/ --enable-clocale=gnu
>> --enable-libstdcxx-debug --enable-libstdcxx-time=yes
>> --with-default-libstdcxx-abi=new --enable-gnu-unique-object
>> --disable-vtable-verify --enable-libmpx --enable-plugin
>> --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
>> --enable-gtk-cairo
>> --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre
>> --enable-java-home
>> --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64
>> --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64
>> --with-arch-directory=amd64
>> --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc
>> --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64
>> --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
>> --enable-checking=release --build=x86_64-linux-gnu
>> --host=x86_64-linux-gnu --target=x86_64-linux-gnu
>> Thread model: posix
>> gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
>>
>> с) Lubuntu 16.04
>>
>> d) Files:
>> $ ls
>> main.c    Makefile sqlite3.c  sqlite3.h
>>
>> $ cat Makefile
>> # Compiler flags
>> #
>> CC ?= cc
>>
>> CFLAGS += -pipe -std=c11
>> CFLAGS += -fbuiltin
>> SQLITEFLAGS += -DSQLITE_THREADSAFE=0
>> SQLITEFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION
>> CFLAGS += $(SQLITEFLAGS)
>> EXE = sqlite_test
>> STATIC = -static
>> STRIP = -s
>>
>> WFLAGS += -Wall -Wextra -Wpedantic -Wshadow
>> WFLAGS += -Wconversion -Wsign-conversion -Winit-self -Wunreachable-code
>> -Wformat-y2k
>> WFLAGS += -Wformat-nonliteral -Wformat-security -Wmissing-include-dirs
>> WFLAGS += -Wswitch-default -Wtrigraphs -Wstrict-overflow=5
>> WFLAGS += -Wfloat-equal -Wundef -Wshadow
>> WFLAGS += -Wbad-function-cast -Wcast-qual -Wcast-align
>> WFLAGS += -Wwrite-strings
>> WFLAGS += -Winline
>>
>> ifneq ($(CC), clang)
>> WFLAGS += -Wlogical-op
>> CFLAGS += -finline-functions
>> CFLAGS += -flto
>> # Perform a number of minor optimizations that are relatively expensive.
>> CFLAGS += -fexpensive-optimizations
>> # Attempt to remove redundant extension instructions. This is especially
>> helpful for the x86-64 architecture, which implicitly zero-extends in
>> 64-bit registers after writing to their lower 32-bit half.
>> CFLAGS += -free
>> endif
>>
>> #
>> # Project files
>> #
>> SRCS = $(wildcard *.c)
>> HDRS = $(wildcard *.h)
>> # Exclude a file
>> OBJS = $(SRCS:.c=.o)
>>
>> #
>> # Release build settings
>> #
>> RELDIR = release
>> RELEXE = $(RELDIR)/$(EXE)
>> RELOBJS = $(addprefix $(RELDIR)/, $(OBJS))
>> RELCFLAGS = -O3 -funroll-loops -DNDEBUG
>> RELCFLAGS += -march=native
>> # GCC only options
>> ifneq ($(CC), clang)
>> RELWFLAGS += -Wsuggest-attribute=const -Wsuggest-attribute=pure
>> -Wsuggest-attribute=noreturn -Wsuggest-attribute=format
>> -Wmissing-format-attribute
>> endif
>>
>> .PHONY: all clean release
>>
>> # Default build
>> all: release
>>
>> #
>> # Release rules
>> #
>> release: $(RELEXE)
>>
>> $(RELEXE): $(RELOBJS)
>>     $(CC) $(CFLAGS) $(WFLAGS) $(RELWFLAGS) $(RELCFLAGS) $(STATIC)
>> $(STRIP) -o $(RELEXE) $^ $(LDFLAGS) $(RELLDFLAGS) $(TCMALLOC)
>>     echo "$(RELEXE) linked."
>>
>> $(RELDIR)/%.o: %.c $(HDRS)
>>     mkdir -p $(RELDIR)
>>     $(CC) -c $(CFLAGS) $(WFLAGS) $(RELWFLAGS) $(RELCFLAGS) -o $@ $<
>>     echo $<" compiled."
>>
>>
>> clean:
>>     rm -rf $(RELEXE) $(RELOBJS)
>>     test -d $(RELDIR) && rm -d $(RELDIR) || true
>>
>>
>> $ cat ./main.c
>> #include "sqlite3.h"
>> #include <stdio.h>
>>
>> int main(void){
>>
>>     printf("SQLite version: %s\n",sqlite3_libversion());
>>
>>     return 0;
>>
>> }
>>
>> e) Run:
>> $ ./release/sqlite_test
>> SQLite version: 3.21.0
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to