Skip to content

Commit 90da509

Browse files
committed
[clang][analyzer] Add support for C++23 container methods releated to iterator in ContainerModeling
1 parent cef6dbb commit 90da509

File tree

3 files changed

+527
-1
lines changed

3 files changed

+527
-1
lines changed

clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,25 @@ class ContainerModeling
7474
CallDescriptionMap<NoItParamFn> NoIterParamFunctions = {
7575
{{CDM::CXXMethod, {"clear"}, 0}, &ContainerModeling::handleClear},
7676
{{CDM::CXXMethod, {"assign"}, 2}, &ContainerModeling::handleAssign},
77+
{{CDM::CXXMethod, {"assign_range"}, 1}, &ContainerModeling::handleAssign},
7778
{{CDM::CXXMethod, {"push_back"}, 1}, &ContainerModeling::handlePushBack},
7879
{{CDM::CXXMethod, {"emplace_back"}, 1},
7980
&ContainerModeling::handlePushBack},
81+
{{CDM::CXXMethod, {"append_range"}, 1},
82+
&ContainerModeling::handlePushBack},
8083
{{CDM::CXXMethod, {"pop_back"}, 0}, &ContainerModeling::handlePopBack},
8184
{{CDM::CXXMethod, {"push_front"}, 1},
8285
&ContainerModeling::handlePushFront},
8386
{{CDM::CXXMethod, {"emplace_front"}, 1},
8487
&ContainerModeling::handlePushFront},
88+
{{CDM::CXXMethod, {"prepend_range"}, 1},
89+
&ContainerModeling::handlePushFront},
8590
{{CDM::CXXMethod, {"pop_front"}, 0}, &ContainerModeling::handlePopFront},
8691
};
8792

8893
CallDescriptionMap<OneItParamFn> OneIterParamFunctions = {
8994
{{CDM::CXXMethod, {"insert"}, 2}, &ContainerModeling::handleInsert},
95+
{{CDM::CXXMethod, {"insert_range"}, 2}, &ContainerModeling::handleInsert},
9096
{{CDM::CXXMethod, {"emplace"}, 2}, &ContainerModeling::handleInsert},
9197
{{CDM::CXXMethod, {"erase"}, 1}, &ContainerModeling::handleErase},
9298
{{CDM::CXXMethod, {"erase_after"}, 1},

clang/test/Analysis/Inputs/system-header-simulator-cxx.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,15 @@ namespace std {
336336
iterator erase(const_iterator position);
337337
iterator erase(const_iterator first, const_iterator last);
338338

339+
template<typename R>
340+
void assign_range(R&& rg);
341+
342+
template<typename R>
343+
iterator insert_range(const_iterator position, R&& rg);
344+
345+
template<typename R>
346+
void append_range(R&& rg);
347+
339348
T &operator[](size_t n) {
340349
return _start[n];
341350
}
@@ -414,6 +423,18 @@ namespace std {
414423
iterator erase(const_iterator position);
415424
iterator erase(const_iterator first, const_iterator last);
416425

426+
template<typename R>
427+
void assign_range(R&& rg);
428+
429+
template<typename R>
430+
iterator insert_range(const_iterator position, R&& rg);
431+
432+
template<typename R>
433+
void append_range(R&& rg);
434+
435+
template<typename R>
436+
void prepend_range(R&& rg);
437+
417438
iterator begin() { return iterator(_start); }
418439
const_iterator begin() const { return const_iterator(_start); }
419440
const_iterator cbegin() const { return const_iterator(_start); }
@@ -488,6 +509,18 @@ namespace std {
488509
iterator erase(const_iterator position);
489510
iterator erase(const_iterator first, const_iterator last);
490511

512+
template<typename R>
513+
void assign_range(R&& rg);
514+
515+
template<typename R>
516+
iterator insert_range(const_iterator position, R&& rg);
517+
518+
template<typename R>
519+
void append_range(R&& rg);
520+
521+
template<typename R>
522+
void prepend_range(R&& rg);
523+
491524
T &operator[](size_t n) {
492525
return _start[n];
493526
}
@@ -561,6 +594,15 @@ namespace std {
561594
iterator erase_after(const_iterator position);
562595
iterator erase_after(const_iterator first, const_iterator last);
563596

597+
template<typename R>
598+
void assign_range(R&& rg);
599+
600+
template<typename R>
601+
void prepend_range(R&& rg);
602+
603+
template<typename R>
604+
iterator insert_range_after(const_iterator pos, R&& rg);
605+
564606
iterator begin() { return iterator(_start); }
565607
const_iterator begin() const { return const_iterator(_start); }
566608
const_iterator cbegin() const { return const_iterator(_start); }

0 commit comments

Comments
 (0)