src: ignore maybe-uninitialized warning string_search#31532
Closed
danbev wants to merge 3 commits intonodejs:masterfrom
Closed
src: ignore maybe-uninitialized warning string_search#31532danbev wants to merge 3 commits intonodejs:masterfrom
danbev wants to merge 3 commits intonodejs:masterfrom
Conversation
Currently, the following compilation warning is generated with GCC
version 8.2.1:
In file included from ../src/node_buffer.cc:29:
../src/string_search.h:
In function ‘size_t node::stringsearch::SearchString(
node::stringsearch::Vector<const Char>,
node::stringsearch::Vector<const Char>,
size_t) [with Char = short unsigned int]’:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
../src/string_search.h:
In function ‘size_t node::stringsearch::SearchString(
node::stringsearch::Vector<const Char>,
node::stringsearch::Vector<const Char>,
size_t) [with Char = unsigned char]’:
../src/string_search.h:113:30:
warning: ‘search’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
The issue here seems to be with the `strategy_` field which is a pointer
to a member function, and it is set in the constructor of StringSearch.
It is always set and I've not been able to work around this warning
so this commit suggests adding a pragma for GCC to ignore the warning.
Collaborator
lundibundi
reviewed
Jan 29, 2020
src/string_search.h
Outdated
| return (this->*strategy_)(subject, index); | ||
| #if (__GNUC__ >= 8) && !defined(__clang__) | ||
| #pragma GCC diagnostic pop | ||
| #endif |
Member
There was a problem hiding this comment.
IIUC the issue is not with strategy_, but with the arrays in the StringSearchBase, which are indeed uninitialized (they will be initialized before BoyerMoore search is started)
Contributor
Author
There was a problem hiding this comment.
@lundibundi Thanks, I'll try to take a closer look at this again this week.
This reverts commit b520c74.
Currently, the following compilation warning is generated with GCC
version 8.2.1:
In file included from ../src/node_buffer.cc:29:
../src/string_search.h:
In function ‘size_t node::stringsearch::SearchString(
node::stringsearch::Vector<const Char>,
node::stringsearch::Vector<const Char>,
size_t) [with Char = short unsigned int]’:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
../src/string_search.h:
In function ‘size_t node::stringsearch::SearchString(
node::stringsearch::Vector<const Char>,
node::stringsearch::Vector<const Char>,
size_t) [with Char = unsigned char]’:
../src/string_search.h:113:30:
warning: ‘search’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
I'm not sure why this works but delegating to the default constructor of
the base class StringSearchBase makes this warning go away.
1 task
bnoordhuis
added a commit
to bnoordhuis/io.js
that referenced
this pull request
Feb 15, 2020
Turn the `strategy_` method pointer into an enum-based static dispatch.
It's both safer and more secure (no chance of method pointer corruption)
and it helps GCC see that the shift and suffix tables it's complaining
about are unused in single char search mode.
Fixes the following warning:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function [-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
Fixes: nodejs#26733
Fixes: nodejs#31532
Fixes: nodejs#31798
Contributor
Author
|
Closing in favor of #31809 |
addaleax
pushed a commit
that referenced
this pull request
Mar 11, 2020
Turn the `strategy_` method pointer into an enum-based static dispatch.
It's both safer and more secure (no chance of method pointer corruption)
and it helps GCC see that the shift and suffix tables it's complaining
about are unused in single char search mode.
Fixes the following warning:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function [-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
Fixes: #26733
Refs: #31532
Refs: #31798
PR-URL: #31809
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
MylesBorins
pushed a commit
that referenced
this pull request
Mar 11, 2020
Turn the `strategy_` method pointer into an enum-based static dispatch.
It's both safer and more secure (no chance of method pointer corruption)
and it helps GCC see that the shift and suffix tables it's complaining
about are unused in single char search mode.
Fixes the following warning:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function [-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
Fixes: #26733
Refs: #31532
Refs: #31798
PR-URL: #31809
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
targos
pushed a commit
that referenced
this pull request
Apr 22, 2020
Turn the `strategy_` method pointer into an enum-based static dispatch.
It's both safer and more secure (no chance of method pointer corruption)
and it helps GCC see that the shift and suffix tables it's complaining
about are unused in single char search mode.
Fixes the following warning:
../src/string_search.h:113:30: warning:
‘search’ may be used uninitialized in this function [-Wmaybe-uninitialized]
return (this->*strategy_)(subject, index);
Fixes: #26733
Refs: #31532
Refs: #31798
PR-URL: #31809
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently, the following compilation warning is generated with GCC
version 8.2.1:
The issue here seems to be with the
strategy_field which is a pointerto a member function, and it is set in the constructor of StringSearch.
It is always set and I've not been able to work around this warning
so this commit suggests adding a pragma for GCC to ignore the warning.
Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passes