Skip to content

Commit 53aadae

Browse files
committed
Fix #14340 FN containerOutOfBounds with std::initializer_list
1 parent 514dc56 commit 53aadae

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

cfg/std.cfg

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9009,6 +9009,16 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
90099009
<container id="stdBasicStringView" startPattern="std :: basic_string_view &lt;" inherits="stdAllStringView">
90109010
<type templateParameter="0"/>
90119011
</container>
9012+
<container id="stdInitializerList" startPattern="std :: initializer_list &lt;" endPattern="&gt; !!::" opLessAllowed="false" itEndPattern="&gt; :: iterator|const_iterator" hasInitializerListConstructor="true">
9013+
<type templateParameter="0"/>
9014+
<size>
9015+
<function name="size" yields="size" returnType="std::size_t"/>
9016+
</size>
9017+
<access>
9018+
<function name="begin" yields="start-iterator"/>
9019+
<function name="end" yields="end-iterator"/>
9020+
</access>
9021+
</container>
90129022
<container id="stdStringView" startPattern="std :: string_view|wstring_view|u16string_view|u32string_view" endPattern="" inherits="stdAllStringView"/>
90139023
<container id="stdExperimentalStringView" startPattern="std :: experimental :: string_view|wstring_view|u16string_view|u32string_view" endPattern="" inherits="stdAllStringView"/>
90149024
<container id="stdExperimentalBasicStringView" startPattern="std :: experimental :: basic_string_view &lt;" inherits="stdBasicStringView" />

test/cfg/std.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5307,3 +5307,15 @@ void containerOutOfBounds_std_string(std::string &var) { // #11403
53075307
// TODO cppcheck-suppress containerOutOfBounds
53085308
var+= s5[3];
53095309
}
5310+
5311+
int containerOutOfBounds_std_initializer_list_access(const std::vector<int>& v) {
5312+
// cppcheck-suppress containerOutOfBounds
5313+
return v[2];
5314+
}
5315+
5316+
int containerOutOfBounds_std_initializer_list() { // #14340
5317+
std::initializer_list<int> x{ 1, 2 };
5318+
// cppcheck-suppress derefInvalidIterator
5319+
int i = *x.end();
5320+
return i + containerOutOfBounds_std_initializer_list_access(x);
5321+
}

0 commit comments

Comments
 (0)