Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
5.5.37, 10.0.11, 10.1.0
-
None
-
None
Description
Leaving variables uninitialized in certain cases helps to achieve top-notch performance. Sometimes compiler thinks that variable may be used uninitialized (whereas it may not) and emits a warning.
To silence these warnings there is UNINIT_VAR() macro:
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \
|
defined(__cplusplus) || !defined(__GNUC__)
|
#define UNINIT_VAR(x) x= 0
|
#else
|
/* GCC specific self-initialization which inhibits the warning. */
|
#define UNINIT_VAR(x) x= x
|
#endif
|
There are a few problems with this macro:
1. It always emits "x= 0" for non-gcc
2. It always emits "x= 0" for C++ code
It means leaving variable uninitialized makes sense only in C code compiled by gcc.
Regarding __cplusplus: there is a reference to gcc bug which was fixed 3 years ago. Probably it is time to remove it?
Attachments
Issue Links
- relates to
-
MDEV-6650 LINT_INIT emits code in non-debug builds
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Fix Version/s | 10.1.0 [ 12200 ] |
Assignee | Sergey Vojtovich [ svoj ] |
Workflow | defaullt [ 42200 ] | MariaDB v2 [ 44277 ] |
Assignee | Sergey Vojtovich [ svoj ] | Sergei Golubchik [ serg ] |
Status | Open [ 1 ] | In Review [ 10002 ] |
Fix Version/s | 10.1 [ 16100 ] | |
Fix Version/s | 10.1.0 [ 12200 ] |
Assignee | Sergei Golubchik [ serg ] | Sergey Vojtovich [ svoj ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Fix Version/s | 10.1.1 [ 16801 ] | |
Fix Version/s | 10.1 [ 16100 ] | |
Resolution | Fixed [ 1 ] | |
Status | Stalled [ 10000 ] | Closed [ 6 ] |
Workflow | MariaDB v2 [ 44277 ] | MariaDB v3 [ 62164 ] |
Workflow | MariaDB v3 [ 62164 ] | MariaDB v4 [ 147934 ] |
Sergei, please review fix for this bug.
Though I doubt it is a good idea to "Always enable -Wall for gnu C/C++" bypassing cmake maintainer mode (specifically FORCE_INIT_OF_VARS).
Now we get more warnings from LINT_INIT(). And there is also LINT_INIT_STRUCT() which didn't work before.