Commit Graph

426 Commits

Author SHA1 Message Date
Howard Hinnant 1c2c87c502 Remove redundant iterator assignment detected by Marshall Clow
llvm-svn: 145265
2011-11-28 19:49:26 +00:00
David Chisnall 5e8e0448c3 On FreeBSD, define a macro that causes the unimplemented C99 math.h functions to be declared. This prevents <cmath> users from being broken, unless they actually use the C++ wrappers that call the missing functions.
llvm-svn: 144501
2011-11-13 17:15:33 +00:00
Howard Hinnant 05e485879c Fix ratio arithmetic with zero
llvm-svn: 143519
2011-11-01 23:13:37 +00:00
Howard Hinnant 9563a09cee Windows port work by Ruben Van Boxem
llvm-svn: 143105
2011-10-27 16:24:42 +00:00
Howard Hinnant 0176bc6cf5 Fixed bug in __independent_bits_engine found by Nick (from stackoverflow)
llvm-svn: 143104
2011-10-27 16:12:10 +00:00
Howard Hinnant e4383379ae More windows port work by Ruben Van Boxem
llvm-svn: 142732
2011-10-22 20:59:45 +00:00
Howard Hinnant 8bece6fe69 Windows port work by Ruben Van Boxem
llvm-svn: 142578
2011-10-20 12:49:21 +00:00
Howard Hinnant a892966218 de-tabbify
llvm-svn: 142237
2011-10-17 20:08:59 +00:00
Howard Hinnant 073458b1ab Windows support by Ruben Van Boxem.
llvm-svn: 142235
2011-10-17 20:05:10 +00:00
Howard Hinnant 7ba930bfca Fix http://llvm.org/bugs/show_bug.cgi?id=11113
llvm-svn: 141714
2011-10-11 21:28:38 +00:00
Howard Hinnant a33d4bc1ff Starting on musl port by Arvid Picciani
llvm-svn: 141672
2011-10-11 16:00:46 +00:00
Howard Hinnant 1ed7df111b Fix <rdar://problem/10256836> getline of an empty string mistakenly causes failure
llvm-svn: 141506
2011-10-09 15:20:46 +00:00
Howard Hinnant 2a4812fd04 Fix <rdar://problem/10255403> match_results::begin() is off by one
llvm-svn: 141494
2011-10-08 14:36:16 +00:00
Howard Hinnant 1e31e53fe1 Fix <rdar://problem/10226704>
llvm-svn: 141054
2011-10-04 01:25:20 +00:00
Howard Hinnant 2c0a65ee78 Fix <rdar://problem/10217868>.
llvm-svn: 140907
2011-10-01 00:26:36 +00:00
Howard Hinnant 8909cdfff9 Windows port work by Ruben Van Boxem
llvm-svn: 140805
2011-09-29 20:33:10 +00:00
Howard Hinnant 0c06e58fae Windows patch work by Ruben Van Boxem
llvm-svn: 140781
2011-09-29 13:33:15 +00:00
Howard Hinnant 9978e3709f Attempted locale refactoring. _LIBCPP_LOCALE__L_EXTENSIONS now should be defined if one has all of the xxx_l() functions. I've defined this for apple, freebsd and win32. _LIBCPP_HAS_DEFAULTRUNELOCALE should be defined if there is a _DefaultRuneLocale. I've defined this for apple and freebsd. The block of code we're trying to migrate away from is now under #ifdef __linux__. I've tested only on OS X. I hope I haven't broken things too badly elsewhere. Please let me know.
llvm-svn: 140734
2011-09-28 23:39:33 +00:00
Howard Hinnant 3438889dec Work on Windows port by Ruben Van Boxem
llvm-svn: 140728
2011-09-28 21:39:20 +00:00
Howard Hinnant 0470a63776 Attempt to enable locale simplification. On which platforms can we now #define _LIBCPP_STABLE_APPLE_ABI?
llvm-svn: 140724
2011-09-28 21:05:01 +00:00
Howard Hinnant 920b56ca88 Another installment on debug mode. This addresses list. However this should be considered a temporary state. The API of the debug database and how vector and list use it, is unsatisfactory at the moment. It is both inefficient and overly verbose. I wanted to get this functionality checked in though. In the next day or so I'll refactor what is there in an attempt to streamline things.
llvm-svn: 140660
2011-09-27 23:55:03 +00:00
Howard Hinnant dbe8111948 Work on Windows port by Ruben Van Boxem
llvm-svn: 140384
2011-09-23 16:11:27 +00:00
Howard Hinnant 3c78ca07bc Partial Windows port by Ruben Van Boxem
llvm-svn: 140328
2011-09-22 19:10:18 +00:00
David Chisnall 89728139cb Fixes for FreeBSD, including some fairly obvious copy-and-paste errors.
libc++ now mostly works on FreeBSD with libcxxrt and this patch applied to the base system:

http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20110920/e666632c/xlocale-0001.obj

Summary of tests on FreeBSD:


****************************************************
Results for /root/libcxx/test:
using FreeBSD clang version 3.0 (trunk 135360) 20110717
Target: x86_64-unknown-freebsd9.0
Thread model: posix
with -std=c++0x -stdlib=libc++ -I/root/libcxx/include -L/root/libcxx/build/lib
----------------------------------------------------
sections without tests   : 1
sections with failures   : 48
sections without failures: 1015
                       +   ----
total number of sections : 1064
----------------------------------------------------
number of tests failed   : 145
number of tests passed   : 4179
                       +   ----
total number of tests    : 4324
****************************************************

(Many due to this clang version not supporting C++ atomics)

More fixes to follow...

llvm-svn: 140245
2011-09-21 08:39:44 +00:00
Howard Hinnant c756bb3574 Chris Jefferson noted that vector iterator ownership can be transferred from source to target under move construction and move assignment. This commit makes that happen for debug mode.
llvm-svn: 140023
2011-09-19 16:34:29 +00:00
Howard Hinnant cdcfbf26dc Removed unneeded boost implementation of is_base_of
llvm-svn: 140014
2011-09-19 13:19:31 +00:00
David Chisnall 0a0f599f2c Enable __locale to work on FreeBSD.
llvm-svn: 140005
2011-09-18 19:23:04 +00:00
Howard Hinnant c36bfc499b Doug Gregor pointed out some problems with debug mode enabled in one TU and not another. This patch helps detect those situations and offers improved error messages to help get debug mode enabled in more TU's when it is absolutely necessary to do so. Thanks Doug.
llvm-svn: 139933
2011-09-16 19:52:23 +00:00
Howard Hinnant 0695db06d7 The vector test suite now passes for no-debug, debug-lite and debug-regular
llvm-svn: 139930
2011-09-16 18:41:29 +00:00
Howard Hinnant cec9af9ead Create multilevel debug mode
llvm-svn: 139913
2011-09-16 17:29:17 +00:00
Howard Hinnant f554add54e Initial checkin for debug mode (version 2)
llvm-svn: 139711
2011-09-14 18:33:51 +00:00
Howard Hinnant 8668139f36 Fix const correctness bug in __move_assign. Found and fixed by Ion Gaztañaga.
llvm-svn: 139032
2011-09-02 20:42:31 +00:00
Howard Hinnant 5d7a6f31f7 Up version number by 1. This is a 'minor version' update.
llvm-svn: 138978
2011-09-01 23:13:01 +00:00
Howard Hinnant 00d8c245b2 Reimplemented much of <istream> such that single character extractions do not check to see if this is the last character in the stream and thus never set eofbit. This fixes http://llvm.org/bugs/show_bug.cgi?id=10817 . This fix requires a recompiled libc++.dylib to be fully implemented. The recompiled libc++.dylib is ABI compatible with that shipped on Lion.
llvm-svn: 138961
2011-09-01 21:02:45 +00:00
Howard Hinnant b1e3e0e59e __split_buffer should only require default constructible. Bug found and fixed by Jared Hoberock
llvm-svn: 138726
2011-08-28 15:21:29 +00:00
Howard Hinnant e41124ade1 Don't move assign string::allocator_type when propagate_on_container_move_assignment is false.
llvm-svn: 137862
2011-08-17 20:36:18 +00:00
Howard Hinnant 052fd9349f Fix needle-in-haystack bug found by Walter Brown
llvm-svn: 137617
2011-08-15 17:22:22 +00:00
Howard Hinnant 54976f2619 Fixed PR10574: http://llvm.org/bugs/show_bug.cgi?id=10574
llvm-svn: 137522
2011-08-12 21:56:02 +00:00
Howard Hinnant 2425d53cd8 Change how _LIBCPP_HAS_NO_ADVANCED_SFINAE gets set.
llvm-svn: 136596
2011-07-31 17:10:44 +00:00
Howard Hinnant f622b58c83 Fixed PR10507 (http://llvm.org/bugs/show_bug.cgi?id=10507)
llvm-svn: 136595
2011-07-31 17:04:30 +00:00
Chandler Carruth 8fd6dc0df3 Revert r136547, r136545, and r136542 by removing slist.
This was checked in without review. It is not clear its reasonable to
include with libc++ at all, and needs discussion at a highlevel before
moving forward.

It's also completely lacking tests, and included several bugs in the
implementation.

llvm-svn: 136577
2011-07-30 21:10:18 +00:00
Chandler Carruth aa41ea2cc1 Revert r136546, which was submitted without review.
Original change:
Destruct elements of hash tables when removing individual entries from
the hash_table. I think this is the correct solution to PR10507, but I'm
not sure since this is a little bit cargo-culted. Howard, please review.

llvm-svn: 136576
2011-07-30 21:10:16 +00:00
Alexis Hunt bf78786db0 Add the missing default argument for the allocator and use a cleaner
implementation of previous().

llvm-svn: 136547
2011-07-30 00:47:53 +00:00
Alexis Hunt 9663c8cb15 Destruct elements of hash tables when removing individual entries from
the hash_table. I think this is the correct solution to PR10507, but I'm
not sure since this is a little bit cargo-culted. Howard, please review.

llvm-svn: 136546
2011-07-30 00:18:12 +00:00
Alexis Hunt 241bf43919 Oops. That last commit was from an earlier revision of the file and was
more than just a bit broken. This one should compile and run without
infinite loops.

llvm-svn: 136545
2011-07-30 00:06:52 +00:00
Alexis Hunt 1e846797dd Include an "implementation" if SGI's slist. This was quickly hacked
together to get it working with code, and is neither optimal
(erase(Iterator, Iterator) calculates the previous iterator twice,
rather than calculating the previous iterator of the first one, then
advancing it until the second is found) nor complete (splice() was not
implemented). Most of the implementation is borrowed from forward_list
via using-declarations.

llvm-svn: 136542
2011-07-29 23:42:36 +00:00
Alexis Hunt 8324378195 Explicitly invoke the size_type specialization of max and min. This
avoids bugs where, when the allocator's size_type was smaller than int,
the multiplication or division would cause integral promotions and, with
two different integer types as arguments, deduction of the template
arguments would fail.

llvm-svn: 136540
2011-07-29 23:31:58 +00:00
Alexis Hunt 8d2ed56644 Add a new hash class in __gnu_ext for the extension containers. There
are two motivations for this.

First, this allows users who are specializing __gnu_ext::hash to
continue doing so without changing their code.

Second, SGI specifies hash overloads for char* and const char* that
perform a hash of the string, not of the pointer.

In order to support this, the hashing code for string is factored out.

llvm-svn: 136539
2011-07-29 23:31:56 +00:00
Alexis Hunt fe473ae277 Add two missing members from the extension hash containers. The first is
the type name 'data_type', which is specified by the SGI spec as being
the correct type name for the mapped type. The second is an overload of
insert found in standard containers, taking an iterator as a 'hint'
(which we ignore in the standard containers as well). libstdc++'s
implementation includes these overloads, and they are needed to make
insert_iterator work (which I suspect is the real motivation for
including them in the standard containers).

The motivation for including these overloads of insert and leaving the
mapped_type typedef is to make it easier for clients to migrate to the
standard containers.

llvm-svn: 136538
2011-07-29 23:31:53 +00:00
Howard Hinnant 89bdcd7ef5 Configure to get along with 2.9 clang
llvm-svn: 136526
2011-07-29 21:35:53 +00:00
Howard Hinnant f4a797e3d2 Optimizing valarray::operator=(some-valarray-expression)
llvm-svn: 136291
2011-07-27 23:19:59 +00:00
Howard Hinnant 02364191d6 Fix PR10509: http://llvm.org/bugs/show_bug.cgi?id=10509
llvm-svn: 136247
2011-07-27 19:25:28 +00:00
Howard Hinnant 21f78d88e1 Fix PR10510: http://llvm.org/bugs/show_bug.cgi?id=10510
llvm-svn: 136232
2011-07-27 18:34:06 +00:00
Howard Hinnant 1dba445e43 http://llvm.org/bugs/show_bug.cgi?id=10469
llvm-svn: 135897
2011-07-24 23:59:50 +00:00
Howard Hinnant 520a61383c Optimization of string::operator< by M.E. O'Neill. Discussion in http://llvm.org/bugs/show_bug.cgi?id=10461
llvm-svn: 135893
2011-07-24 21:45:06 +00:00
Howard Hinnant 5b0bdc2043 http://llvm.org/bugs/show_bug.cgi?id=10461
llvm-svn: 135873
2011-07-24 15:07:21 +00:00
Howard Hinnant 7e6ca972c9 http://llvm.org/bugs/show_bug.cgi?id=10455
llvm-svn: 135854
2011-07-23 16:14:35 +00:00
Alexis Hunt 397d787642 Given that __underlying_type is now available in clang, implement
std::underlying_type.

llvm-svn: 135410
2011-07-18 18:37:21 +00:00
Howard Hinnant e3163f5ae3 http://llvm.org/bugs/show_bug.cgi?id=10390
llvm-svn: 135393
2011-07-18 15:51:59 +00:00
Howard Hinnant 8ebf07a3de Revert locale for apple back to original design, getting rid of now useless helper *_l functions
llvm-svn: 135272
2011-07-15 14:46:11 +00:00
Howard Hinnant 3b13c94a14 _LIBCXX_STABLE_APPLE_ABI -> _LIBCPP_STABLE_APPLE_ABI
llvm-svn: 135271
2011-07-15 14:25:40 +00:00
Alexis Hunt 4084c9ebe5 Reapply 135035 with proper conditional inclusion, hopefully solving
issues with it.

llvm-svn: 135246
2011-07-15 05:40:33 +00:00
Howard Hinnant 88410049fa http://llvm.org/bugs/show_bug.cgi?id=10346
llvm-svn: 135045
2011-07-13 16:00:50 +00:00
Howard Hinnant f6b7e20bc8 Reverted to 134947. Once I got into it, I discovered there were too many problems to fix in 135035.
llvm-svn: 135044
2011-07-13 15:48:16 +00:00
Alexis Hunt 8a02a632be Implement the __nolocale functions properly so that they will work on
all platforms. Unfortunately a lot of this remains conditionally
compiled so as not to break Apple's ABI.

The new _LIBCPP_LOCALE__L_EXTENSIONS macro can be defined on other
platforms that support _l suffixes for all functions in order to use
them.

llvm-svn: 135035
2011-07-13 06:40:50 +00:00
Alexis Hunt 8dfec1ac7d Make sure that __time_put constructors properly on non-Apple platforms.
llvm-svn: 134947
2011-07-12 00:55:04 +00:00
Howard Hinnant 7ae42ef0bf Make vector<bool>::reference and const_reference public
llvm-svn: 134815
2011-07-09 15:50:42 +00:00
Alexis Hunt 0081892d33 Don't assume that wctype produces a nice mask on all platforms. On
glibc, for instance, it's a const char *.

llvm-svn: 134787
2011-07-09 03:40:04 +00:00
Alexis Hunt f023519770 Conditionally wrap the changes from r134781.
llvm-svn: 134783
2011-07-09 01:09:31 +00:00
Alexis Hunt 3f60bca9e9 Implement generalized table lookups for upper, lower, and character
traits.

To the best of my knowledge, this will not break the ABI for Apple.
However, it does introduce three publicly visible (although with
reserved name) functions that will fail to link against the just-shipped
Apple version of libc++. Since they are not used in any inline
functions, no actual breakage should occur.

If Howard doesn't want to put undefined functions (even internal ones)
into a header, they could be surrounded by additional conditional
compilation.

llvm-svn: 134781
2011-07-09 00:56:23 +00:00
Howard Hinnant 11af28bdbd Fixing up some ABI issues
llvm-svn: 134639
2011-07-07 21:03:52 +00:00
Howard Hinnant 1f8da84b76 Fix uninitialized loop counter. http://llvm.org/bugs/show_bug.cgi?id=10278
llvm-svn: 134405
2011-07-05 14:14:17 +00:00
Howard Hinnant a77445621b http://llvm.org/bugs/show_bug.cgi?id=10248
llvm-svn: 134327
2011-07-02 20:33:23 +00:00
Howard Hinnant 086d0de171 http://llvm.org/bugs/show_bug.cgi?id=10250
llvm-svn: 134325
2011-07-02 18:22:36 +00:00
Howard Hinnant b929de3c3d Changed constraints on pair and tuple constructors from is_convertible to is_constructible.
llvm-svn: 134252
2011-07-01 20:12:51 +00:00
Howard Hinnant 5a33687da0 Correct for new rules regarding implicitly deleted special members. http://llvm.org/bugs/show_bug.cgi?id=10191
llvm-svn: 134248
2011-07-01 19:24:36 +00:00
Howard Hinnant ce48a1137d _STD -> _VSTD to avoid macro clash on windows
llvm-svn: 134190
2011-06-30 21:18:19 +00:00
Douglas Gregor 64ec101eb6 Teach libc++ about the addressof() overloads it needs to work with
Objective-C Automatic Reference Counting, where Objective-C object
pointers can have several different qualifiers (__strong, __weak,
__autoreleasing, __unsafe_unretained). These addressof() overloads are
only provided in ARC mode, and the __weak variant is conditionalized
on having weak-reference support in the ARC runtime.

For historical reasons, Clang provides these definitions itself, and
defines the macro _LIBCPP_PREDEFINED_OBJC_ARC_ADDRESSOF to note when
it as done so. The code belongs here, and this redundancy will be
eliminated in the future.

Addresses <rdar://problem/9658274>.

llvm-svn: 133656
2011-06-22 22:17:44 +00:00
Howard Hinnant a945a32981 More fixes: One of my fixes to type_traits earlier today was incorrect, so that is reverted. Recently clang appears to have tightened up its definition of is_convertible and that has caused some failures in [unordered_][multi]map. I've switched to using is_constructible to restablish the desired functionality in [unordered_][multi]map. Specifically, inserting rvalues of move-only types for the keys.
llvm-svn: 133402
2011-06-19 21:45:00 +00:00
Howard Hinnant 2d62821f98 Miscellaneous minor fixes in <type_traits>
llvm-svn: 133401
2011-06-19 19:12:59 +00:00
Howard Hinnant ce53420e37 Provide names for template and function parameters in forward declarations. The purpose is to aid automated documentation tools.
llvm-svn: 133008
2011-06-14 19:58:17 +00:00
Howard Hinnant 32208bde75 Move nullptr_t to unversioned namespace: Sean Hunt
llvm-svn: 132665
2011-06-05 13:00:46 +00:00
Howard Hinnant bd0c160078 noexcept for <stack>. This completes noexcept for Chapter 23 [containers].
llvm-svn: 132652
2011-06-04 22:09:19 +00:00
Howard Hinnant 6971d82668 noexcept for <queue>.
llvm-svn: 132650
2011-06-04 21:32:33 +00:00
Howard Hinnant 557da866a3 noexcept for <unordered_set>.
llvm-svn: 132647
2011-06-04 20:18:37 +00:00
Howard Hinnant 3714107ed6 noexcept for <unordered_map>.
llvm-svn: 132646
2011-06-04 18:54:24 +00:00
Howard Hinnant e691351098 Made more implementation details of [multi]map/set noexcept.
llvm-svn: 132642
2011-06-04 17:10:24 +00:00
Howard Hinnant 0e9f71c13f noexcept for <set>. Plus a few fixes to noexcept for <map>.
llvm-svn: 132640
2011-06-04 15:22:34 +00:00
Howard Hinnant 1052ee39cb noexcept for <map>.
llvm-svn: 132639
2011-06-04 14:31:57 +00:00
Howard Hinnant 3297ed7065 noexcept for <vector>. This also includes installing move_if_noexcept() into vector.
llvm-svn: 132577
2011-06-03 19:40:40 +00:00
Howard Hinnant 2d45a18c24 Bring noexcept for <string> inline with other containers.
llvm-svn: 132573
2011-06-03 18:40:47 +00:00
Howard Hinnant 4590010473 noexcept for <list>.
llvm-svn: 132562
2011-06-03 17:30:28 +00:00
Howard Hinnant 91a4750733 noexcept for <forward_list>.
llvm-svn: 132553
2011-06-03 16:20:53 +00:00
Howard Hinnant 801291139c After sleeping on it I've decided that all special members that can be noexcept, should be declared so. The client has the traits to detect and branch on this information, and it is often an important optimization. Give deque() a noexcept. Add test for deque default constructor and deque destructor.
llvm-svn: 132549
2011-06-03 15:16:49 +00:00
Howard Hinnant b58f59cdb3 Second try at getting noexcept on move and swap for deque. I changed std::alloctor to propagate_on_container_move_assignment so as to make deque<T> move assignment noexcept. What we really need is a compile-time switch that says an allocator always compares equal.
llvm-svn: 132490
2011-06-02 21:38:57 +00:00
Howard Hinnant 9eebe11dd5 I've become quite disatsified with the lack of noexcept specifications on container move construction, move assignment operator and swap. Without proper decoration on at least move construction, vectors of containers will have unacceptable performance. Here's the fix for deque.
llvm-svn: 132480
2011-06-02 20:00:14 +00:00
Howard Hinnant f9dc28313f noexcept for forward_list.
llvm-svn: 132461
2011-06-02 16:44:28 +00:00
Howard Hinnant a87e836083 noexcept for deque.
llvm-svn: 132459
2011-06-02 16:10:22 +00:00
Howard Hinnant bc95cf0d5f Experimental support for a meaningful __is_swappable<T>::value. This does not appear to be strictly needed for correct functioning of the library. If it causes any problems, I'd rather pull it sooner rather than later.
llvm-svn: 132421
2011-06-01 19:59:32 +00:00
Howard Hinnant e88f577da1 Turning on cxx_nullptr exposed a latent bug in is_function, causing nullptr to wrongly classify as a function. Fixed.
llvm-svn: 132406
2011-06-01 17:25:11 +00:00