diff options
| author | Louis Dionne <ldionne@apple.com> | 2019-02-12 16:06:02 +0000 |
|---|---|---|
| committer | Louis Dionne <ldionne@apple.com> | 2019-02-12 16:06:02 +0000 |
| commit | 7232a84e686a0d1bf834a845e4e59c5594ae8957 (patch) | |
| tree | 195b6c40e1303e25ea40e4e2bc4829a081d7231a /libcxx/include/unordered_map | |
| parent | d694160e665eb3cefc93a07af8232aec0b7d2410 (diff) | |
| download | bcm5719-llvm-7232a84e686a0d1bf834a845e4e59c5594ae8957.tar.gz bcm5719-llvm-7232a84e686a0d1bf834a845e4e59c5594ae8957.zip | |
[libc++] Avoid UB in the no-exceptions mode in a few places
Summary:
A few places in the library seem to behave unexpectedly when the library
is compiled or used with exceptions disabled. For example, not throwing
an exception when a pointer is NULL can lead us to dereference the pointer
later on, which is UB. This patch fixes such occurences.
It's hard to tell whether there are other places where the no-exceptions
mode misbehaves like this, because the replacement for throwing an
exception does not always seem to be abort()ing, but at least this
patch will improve the situation somewhat.
See http://lists.llvm.org/pipermail/libcxx-dev/2019-January/000172.html
Reviewers: mclow.lists, EricWF
Subscribers: christof, jkorous, dexonsmith, libcxx-commits
Differential Revision: https://reviews.llvm.org/D57761
llvm-svn: 353850
Diffstat (limited to 'libcxx/include/unordered_map')
| -rw-r--r-- | libcxx/include/unordered_map | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map index 87278b07d74..7ae9805d81d 100644 --- a/libcxx/include/unordered_map +++ b/libcxx/include/unordered_map @@ -1602,10 +1602,8 @@ _Tp& unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::at(const key_type& __k) { iterator __i = find(__k); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__i == end()) - throw out_of_range("unordered_map::at: key not found"); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_out_of_range("unordered_map::at: key not found"); return __i->second; } @@ -1614,10 +1612,8 @@ const _Tp& unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::at(const key_type& __k) const { const_iterator __i = find(__k); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__i == end()) - throw out_of_range("unordered_map::at: key not found"); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_out_of_range("unordered_map::at: key not found"); return __i->second; } |

