[Maria-developers] Warnings in MariaDB
Hi! I have been removing warnings (found by buildbot) from the MariaDB 5.1 tree. (Will be pushed later today). Here is some comments, suggestions of what we still to do to make the buildbot part 'more clean: ------ We get a lot of warnings of the type: ctype-ucs2.c:206: warning: ‘s_wc’ may be used uninitialized in this function This are false warnings (The compiler is not smart enough to figure this out). The variables are also protected with the LINT_INIT() macro. Suggestion (for Kristian): - If you compile with -Wuninitialized, also use the -DFORCE_INIT_OF_VARS When compiling for valgrind, we should not use -Wuninitialized or -DFORCE_INIT_OF_VARS ------- For Percona: We get the following warnings from xtradb: ../../storage/xtradb/include/dict0dict.ic:729: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement ../../storage/xtradb/include/dict0dict.ic:788: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement ../../storage/xtradb/include/dict0dict.ic:729: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement ../../storage/xtradb/include/dict0dict.ic:788: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement ../../include/../storage/xtradb/include/dict0dict.ic:729: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement ../../include/../storage/xtradb/include/dict0dict.ic:788: warning: suggest a space before ‘;’ or explicit braces around empty body in ‘while’ statement Can you fix these ? ---------- I don't know if the following warning comes from us or from the include files: /usr/include/bits/string3.h:82: warning: call to ‘__warn_memset_zero_len’ declared with attribute warning: memset used with constant zero length parameter; this could be due to transposed parameters Need suggestions/help to solve this one. Either we need to find the code in MariaDB that generates the warning or disable warnings in buildbot from /usr/include --------- Regards, Monty
Michael Widenius <monty@askmonty.org> writes:
Here is some comments, suggestions of what we still to do to make the buildbot part 'more clean:
Finally got to this after long wait ...
We get a lot of warnings of the type:
ctype-ucs2.c:206: warning: ‘s_wc’ may be used uninitialized in this function
This are false warnings (The compiler is not smart enough to figure this out). The variables are also protected with the LINT_INIT() macro.
Suggestion (for Kristian):
- If you compile with -Wuninitialized, also use the -DFORCE_INIT_OF_VARS
I added this to Buildbot, should happen for new builds. To facilitate this, I added the feature to set extra flags and options when using BUILD/compile-xxx scripts. For example: BUILD/compile-pentium64-valgrind-max --extra-flags="-Wno-uninitialized -O3" New options are: --extra-cflags # Added to CFLAGS --extra-cxxflags # Added to CXXFLAGS --extra-flags # Added to both CFLAGS and CXXFLAGS --extra-configs # Added to ./configure line The same can be achieved using environment variables: EXTRA_CFLAGS EXTRA_CXXFLAGS EXTRA_FLAGS EXTRA_CONFIGS I use the environment variables in Buildbot instead of the options, as Buildbot works on lots of branches, some of which do not support the new options. Using environment variables avoid getting a build failure in these branches or having to do extra configuration to do different kinds of build depending on exactly what is in the branch.
When compiling for valgrind, we should not use -Wuninitialized or -DFORCE_INIT_OF_VARS
This is already the case. In Buildbot, I changed the Valgrind builds to compile with optimisations (as we want to catch any problems due to compiler bugs or wrong use of C/C++ that only shows in this case). But I kept the BUILD/compile-*-valgrind-* scripts using no optimisation by default for easier debugging for developers. Also, I did not change the default behaviour of BUILD/compile-pentium-max (and similar scripts) to use -DFORCE_INIT_OF_VARS by default, as I was not sure it is proper to have this option in build a build script that does a "release" type build.
I don't know if the following warning comes from us or from the include files:
/usr/include/bits/string3.h:82: warning: call to ‘__warn_memset_zero_len’ declared with attribute warning: memset used with constant zero length parameter; this could be due to transposed parameters
Need suggestions/help to solve this one. Either we need to find the code in MariaDB that generates the warning or disable warnings in buildbot from /usr/include
This comes from YaSSL. It has this code class Source { ... explicit Source(word32 sz = 0) : buffer_(sz), current_(0) {} Calling the constructor with no arguments Source cert; eventually ends up in this code memset(buffer_, 0, sz_ * sizeof(T)); where sz_ is zero. So this translates into memset(buffer_, 0, 0), which glibc has a warnings for when the last parameter is a _constant_ zero. So the inlining is causing it here. There are a couple ways to fix it, the simplest is probably just to add if (sz_ != 0) just before the memset. I have pushed this into lp:maria. - Kristian.
participants (2)
-
Kristian Nielsen
-
Michael Widenius