Howard Hinnant
04c4cffbe1
I had a buffer mismanagement bug in the demangler.
...
llvm-svn: 187255
2013-07-26 22:14:53 +00:00
Howard Hinnant
ef93bc1c8a
Updated CREDITS.TXT
...
llvm-svn: 185464
2013-07-02 19:01:59 +00:00
Howard Hinnant
60c16eb7f5
I'd no sooner made the last commit when Matthew Dempsky sent me another test case that led me to yet another closely related test case that the current design could not handle. I've now changed the way forward references are handled completely. It wasn't that much code to change. The demangler, when confronted with a forward reference to a template parameter, now parses things twice. During the second parse, all forward references are remembered from the first parse. Test suite updated with new case.
...
llvm-svn: 184672
2013-06-23 19:52:45 +00:00
Howard Hinnant
cde9e006d8
After a private conversation with Arthur O'Dwyer, and a good night's sleep, I believe this fix is a better fix than what I committed in r184656 yesterday. I've basically moved the checking for '`' from the start of the demangling process to the end of it. In the process I discovered that one of the test cases no longer demangled to the expected string. After further investigation I believe this case to not be a valid mangled string, and so I moved the test case to the 'invalid cases'. The reason I believe it is invalid is that it should use T_ instead of T0_ to index the template parameter.
...
llvm-svn: 184668
2013-06-23 17:14:35 +00:00
Howard Hinnant
ae10f9d45e
Filter out '`' in mangled strings and reject them as invalid if found.
...
llvm-svn: 184656
2013-06-23 03:36:38 +00:00
Howard Hinnant
72a54eab35
I created a random mangled name generator and have thrown about 200 million random strings at the demangler. I succeeded in crashing it twice more and those crashers have been fixed and the test suite updated with the crash cases.
...
llvm-svn: 184562
2013-06-21 17:04:24 +00:00
Howard Hinnant
8935442538
Another demangler crasher. Updated test suite to prevent regression.
...
llvm-svn: 184477
2013-06-20 21:49:34 +00:00
Howard Hinnant
763e591461
Protect against invalid mangled names. Add test suite for invalid mangled names.
...
llvm-svn: 184394
2013-06-20 01:55:07 +00:00
Howard Hinnant
b076753454
Demangle objc mangling implemented in r184250
...
llvm-svn: 184301
2013-06-19 13:43:18 +00:00
Howard Hinnant
80fe668394
Tweaks/cleanups provided by Matthew Dempsky
...
llvm-svn: 184118
2013-06-17 20:25:21 +00:00
Howard Hinnant
862c4a06ee
Demangler update: This now demangles many more (all?) C++11 symbols. Demangler tests updated.
...
llvm-svn: 184097
2013-06-17 18:10:34 +00:00
Howard Hinnant
f2ca35cd79
Add capability to demangle invocation functions for ObjC blocks.
...
llvm-svn: 179208
2013-04-10 19:44:03 +00:00
Howard Hinnant
be2eced483
Bruce Mitchener: Typo fixes.
...
llvm-svn: 175275
2013-02-15 15:48:49 +00:00
Howard Hinnant
2b853bf65f
Partially revert r152770. That commit moved the default handlers to their own file. But it also did some refactoring. It is the latter that is being reverted. The refactoring had accidentally removed the required effect that the default unexpected_handler calls std::terminate(), which is a visible effect.
...
llvm-svn: 174532
2013-02-06 19:29:55 +00:00
NAKAMURA Takumi
43632a26a5
Update the copyright coredits -- Happy new year 2013!
...
llvm-svn: 171342
2013-01-01 10:00:19 +00:00
Daniel Malea
f32048d26b
Rename class __lambda_node to ___lambda_node to fix compile failure with gcc 4.6 and 4.7
...
- using "__lambda_node" causes internal compiler error in newer GCC versions
llvm-svn: 169402
2012-12-05 18:55:49 +00:00
Howard Hinnant
c1c87c15f2
__list::ends_with_template was giving the wrong answer for empty lists. And __parse_unnamed_type_name wasn't properly handling the list of paramters and was not safe against incorrectly mangled lambdas (running past last).
...
llvm-svn: 169022
2012-11-30 18:43:50 +00:00
Howard Hinnant
7166bff4ff
Remove aborts under __dynamic_cast which were under _LIBCXX_DYNAMIC_FALLBACK. Change all type_info comparisons to use an inlined is_equal helper. However no change in functionality for this latter change at this time. This is just to encapsulate the comparison and make it a little easier to switch back and forth for testing/debugging.
...
llvm-svn: 168052
2012-11-15 18:00:42 +00:00
Howard Hinnant
fe4d464f52
Update CREDIT.TXT
...
llvm-svn: 167847
2012-11-13 15:57:18 +00:00
Howard Hinnant
70abebed37
Wen-Han Gu: Fix for http://llvm.org/bugs/show_bug.cgi?id=14312 Exception Table out-of-range but still keep walking.
...
llvm-svn: 167733
2012-11-12 18:19:15 +00:00
Howard Hinnant
c33e98ca05
Make the type_info for __shim_type_info visible. This should address some failing dynamic_casts that a few applications are doing on the type_info hierarchy.
...
llvm-svn: 165883
2012-10-13 18:45:59 +00:00
Micah Villmow
fb89f27a8f
Move TargetData to DataLayout.
...
llvm-svn: 165397
2012-10-08 16:29:26 +00:00
Howard Hinnant
538fe8f35b
Set up code under _LIBCXX_DYNAMIC_FALLBACK which is off by default. For a full description of _LIBCXX_DYNAMIC_FALLBACK, see src/private_typeinfo.cpp.
...
llvm-svn: 164863
2012-09-28 22:43:50 +00:00
Howard Hinnant
785a8721d2
Improve the diagnostic messages on dynamic_cast.
...
llvm-svn: 164833
2012-09-28 17:58:48 +00:00
Howard Hinnant
2d0352cbf8
Two changes: 1) I still didn't have the ABI correct to match the gcc-4.2 std::string under the exception classes. I think the changes to stdexcept.cpp have got that down now. 2) On Apple platforms I'm seeing visibility bugs in applications with respect to type_info's being hidden. This is causing dynamic_cast to malfunction because there are multiple type_info's running around for one type within an application, making dynamic_cast believe that one type is actually multiple types. As a stop gap measure I'm trying to detect this error, print out an error message, but continue with the most likely desired result. This is all under __APPLE__. This behavior can be expanded to other platforms if desired.
...
llvm-svn: 164809
2012-09-28 00:05:34 +00:00
Marshall Clow
8493cad160
Updating email address
...
llvm-svn: 164490
2012-09-24 14:27:24 +00:00
Howard Hinnant
128ec49e29
Rename class __lambda to __lambda_node to avoid clash with gcc. This fixes http://llvm.org/bugs/show_bug.cgi?id=13889
...
llvm-svn: 164405
2012-09-21 19:21:37 +00:00
Howard Hinnant
ed3d690f68
Tweak use of dlopen to be a little more correct and higher performing.
...
llvm-svn: 164404
2012-09-21 19:12:56 +00:00
Howard Hinnant
e115af2777
I've added Apple-only behavior that looks for libstdc++ in the same process and if found, checks the string stored in <stdexcept> exception objects to see if it is the gcc empty string singleton before manipulating the reference count. This is done so that if such an exception is created with a zero-length string in libstdc++, libc++abi won't try to delete the memory. This is part of a ongoing process to make libc++ exceptions ABI-compatible with libstdc++-4.2 exceptions, to the point that each library can catch exceptions thrown by the other. If other parties would also like this behavior, the #if __APPLE__ can be broadened.
...
llvm-svn: 164170
2012-09-18 21:34:12 +00:00
Howard Hinnant
6aa048efc9
Specifically disallow primary-expressions of the form LT_... on the basis of this decition: http://sourcerytools.com/pipermail/cxx-abi-dev/2011-August/002422.html . Failure to disallow this was causing infinite recursion in the demangler when these symbols show up due to mangling bugs. This patch causes the demangler to return an invalid mangled name result rather than crash in infinite recursion.
...
llvm-svn: 163859
2012-09-13 23:49:59 +00:00
Howard Hinnant
2c2b55f27f
Change size of reference count field in __libcpp_nmstr from 32 bits to 64 bits for 64 bit targets. This is controls the data layout of all exceptions defined in <stdexcept>. This aligns the ABI with that of gcc-4.2.
...
llvm-svn: 161496
2012-08-08 16:15:16 +00:00
Howard Hinnant
757640b156
Fixes apple: #12020687 . This was a problem in the demangler with template
...
substitution forward references. That is, sometimes a mangled name refers to
a substitution that hasn't yet been defined. The demangler was derferencing a
null pointer in this case because it wasn't properly guarded against a
forward reference. Test case added to catch this problem.
llvm-svn: 161267
2012-08-03 22:02:07 +00:00
Howard Hinnant
3a86b142a1
Update status.
...
llvm-svn: 161221
2012-08-02 22:06:41 +00:00
Howard Hinnant
fdfcfcf670
Update CREDITS.TXT
...
llvm-svn: 161129
2012-08-01 19:24:04 +00:00
Howard Hinnant
b2a9cee678
Erik Olofsson: This patch adds support for lambda demangling. I fixed this because it crashed lldb when it tried to demangle the added test.
...
Not sure how it should identify the lambda so that might need changing from the current 'lambdax':: Howard: Please patch CREDITS.TXT.
llvm-svn: 161125
2012-08-01 18:56:46 +00:00
Howard Hinnant
a8c5d770f9
Andrew Morrow: Mainline clang seems to have recently become more strict about the
...
consistent application of visibility attributes, which causes some new
breakage in libcxxabi:
In file included from src/libcxxabi/src/cxa_default_handlers.cpp:19:
src/libcxxabi/src/private_typeinfo.h:123:23: error: visibility does
not match previous declaration
class __attribute__ ((__visibility__(default))) __class_type_info
^
src/libcxxabi/src/private_typeinfo.h:19:13: note: previous attribute is here
#pragma GCC visibility push(hidden)
^
1 error generated.
The forward declaration of __class_type_info is picking up hidden
visibility from the #pragma, which conflicts with the default
visibility applied when the class is later fully declared. I'm
assuming that the full declaration has it right (and that the
diagnostic is correct), so the attached patch applies the default
visibility attribute to the forward declaration.
llvm-svn: 160933
2012-07-29 20:41:19 +00:00
Howard Hinnant
95d917f8ee
Andrew Morrow: The variable 't1' on line 10188 of cxa_demangle.cpp is uninitialized
...
which generates -Wsometimes-uninitialized. Howard: The only thing this patch is missing is an update to CREDITS.TXT.
llvm-svn: 160932
2012-07-29 16:14:52 +00:00
Sylvestre Ledru
0527b8f942
add a link to the libc++ website
...
llvm-svn: 160553
2012-07-20 17:21:42 +00:00
Richard Smith
4c50ea27bf
Add missing #include <stdlib.h> into test which uses ::exit.
...
llvm-svn: 160039
2012-07-11 09:37:56 +00:00
Howard Hinnant
7f53a5da57
Don't dereference root in __parse_ctor_dtor_name unless it is known to not be null.
...
llvm-svn: 158556
2012-06-15 21:57:51 +00:00
Howard Hinnant
ba2e8aeda5
Fix bug in cxa_demangle involving template substitution.
...
llvm-svn: 155994
2012-05-02 15:38:11 +00:00
Howard Hinnant
9de0b35648
Make __cxa_new_handler un-mangled
...
llvm-svn: 155763
2012-04-28 16:46:04 +00:00
Howard Hinnant
2a9c509c7e
Changed 'cause' from 'terminate' to 'uncaught' in default_terminate_handler
...
llvm-svn: 155452
2012-04-24 17:41:51 +00:00
Howard Hinnant
b54f86aa9d
Richard Smith: __int128 is a GNU keyword which clang 3.1 supports. This usage of it as an identifier will need to be renamed.
...
llvm-svn: 155044
2012-04-18 20:55:06 +00:00
Howard Hinnant
e59dbd7b82
I would really like to write the handlers in terms of C++11 atomics. This would give us the best performance, portablity, and safety tradeoff. Unfortunately I can not yet do that. So I've put the desired code in comments, and reverted the handler getters to the slower but safer legacy atomic intrinsics.
...
llvm-svn: 153041
2012-03-19 16:56:51 +00:00
Howard Hinnant
4ac72dd982
I've moved __cxa_terminate_handler, __cxa_unexpected_handler and __cxa_new_handler from the public header cxxabi.h into the private header cxa_handlers.hpp. During this move I've also moved them from namespace __cxxabiapple into the global namespace. They are, and have always been extern C and so the namespace (or lack of it) does not affect their ABI. In general external clients should not reference these symbols. They are atomic variables and will be changing into C++11 atomic variables in the future. However for those few clients who really need access to them, their name, mangling, size, alignment and layout will remain stable. You just may need your own declaration of them. Include guards have been added to the private header cxa_exception.hpp. The private header cxa_default_handlers.hpp has been removed and the default handlers are now file-static. Include guards have been added to the private header cxa_handlers.hpp.
...
llvm-svn: 153039
2012-03-19 16:20:34 +00:00
Howard Hinnant
0f73197364
Arm fixes in cxa_personality.cpp and a little refactoring.
...
llvm-svn: 152966
2012-03-17 00:10:52 +00:00
Dave Zarzycki
d6533ccd48
Less lame "concurrency" support
...
These APIs aren't thread safe, but they're pretending to be. Let's at
least make the getter as fast as they can be. The setters are a lost
cause unless the API can be fixed.
llvm-svn: 152786
2012-03-15 08:58:08 +00:00
Dave Zarzycki
13e35c086c
Be friendly to when dead_strip doesn't work
...
Apple Radar: 11053417
llvm-svn: 152785
2012-03-15 08:58:06 +00:00
Nick Kledzik
778324abe4
move default handlers to their own file so they can be overridden at build time (dyld)
...
llvm-svn: 152770
2012-03-15 01:52:12 +00:00
Howard Hinnant
ffa26667d9
Missed an underscore on the last commit.
...
llvm-svn: 152736
2012-03-14 19:39:50 +00:00
Howard Hinnant
baae2be624
Enable __arm__ on apple
...
llvm-svn: 152735
2012-03-14 19:30:00 +00:00
Nick Kledzik
37cb6555f0
fix crash log magic
...
llvm-svn: 152693
2012-03-14 01:16:14 +00:00
Howard Hinnant
3bfc622bdb
Enable / silence -Wunused-parameter.
...
llvm-svn: 152415
2012-03-09 18:01:37 +00:00
Howard Hinnant
e6de8df54e
Enable -Wstrict-aliasing=2 -Wstrict-overflow=4.
...
llvm-svn: 152338
2012-03-08 20:55:13 +00:00
Howard Hinnant
8292678017
Enable/silence -Wsign-compare.
...
llvm-svn: 152336
2012-03-08 20:51:01 +00:00
Howard Hinnant
71c4857a07
Enable/silence -Wsign-compare.
...
llvm-svn: 152335
2012-03-08 20:50:28 +00:00
Howard Hinnant
37c247c13c
Enable/silence -Wmissing-field-initializers.
...
llvm-svn: 152334
2012-03-08 20:32:50 +00:00
Howard Hinnant
7cafb87441
Enable/silence -Wunused-variable.
...
llvm-svn: 152329
2012-03-08 20:23:24 +00:00
Howard Hinnant
d121eb2c24
Enable/silence -Wconversion.
...
llvm-svn: 152328
2012-03-08 20:16:45 +00:00
Howard Hinnant
11dd38dab0
Enable/silence -Wshadow.
...
llvm-svn: 152325
2012-03-08 19:34:58 +00:00
Howard Hinnant
41bcf33c63
Enable/silence -Wsign-conversion.
...
llvm-svn: 152323
2012-03-08 18:45:24 +00:00
Howard Hinnant
20d6c14c88
First attempt at arm support.
...
llvm-svn: 151765
2012-02-29 22:14:19 +00:00
Howard Hinnant
fdad25a40a
Insert a couple of dummy virtual functions to ease low level binary compatibility with other low level tools.
...
llvm-svn: 151282
2012-02-23 21:09:29 +00:00
Howard Hinnant
2d809ac734
And the handlers should be extern C.
...
llvm-svn: 151261
2012-02-23 17:25:34 +00:00
Howard Hinnant
49f28b5a47
I had originally made the handler function pointers a static internal detail, not accessible to the outside world. I did this because they must be accessed in a thread-safe manner, and the library provides thread-safe getters and setters for these. However I am at least temporarily making them public and giving them the Apple-extension names. In the future these may disappear again, and I think that would probably be a good idea.
...
llvm-svn: 151256
2012-02-23 15:32:07 +00:00
Dave Zarzycki
3cd25390e5
Pedantic fix: missing newline at EOF
...
llvm-svn: 151132
2012-02-22 05:25:00 +00:00
Howard Hinnant
3e7d155768
Move typeinfos for exceptions in <stdexcept> to the abi
...
llvm-svn: 150834
2012-02-17 19:23:47 +00:00
Howard Hinnant
995fcc0d49
Add (reluctantly) a namespace alias for __cxxabiv1.
...
llvm-svn: 150828
2012-02-17 18:45:44 +00:00
Howard Hinnant
d901bb4de4
Remove outdated information from comment.
...
llvm-svn: 150827
2012-02-17 18:45:04 +00:00
Howard Hinnant
71cf5ab0d3
__gxx_personality_v0 and __cxa_call_unexpected are complete on darwin and I *think* linux (not positive), but still unimplemented on arm.
...
llvm-svn: 149711
2012-02-03 20:53:52 +00:00
Howard Hinnant
92afda06d7
Pushed optimization back up. Crash disappeared with compiler upgrade. Assumed to be due to compiler bug.
...
llvm-svn: 149702
2012-02-03 18:36:36 +00:00
Howard Hinnant
31dea02601
corrected namespace in test
...
llvm-svn: 149635
2012-02-02 22:00:52 +00:00
Howard Hinnant
eaa65afc7b
Work on restricting symbol visibility.
...
llvm-svn: 149633
2012-02-02 20:47:28 +00:00
Howard Hinnant
90ef25c05e
Add version number to this library so we can recognize when we're using it.
...
llvm-svn: 149632
2012-02-02 20:47:05 +00:00
Howard Hinnant
67e5863cd9
There's a crasher I need to track down, occurring at -O0.
...
llvm-svn: 149631
2012-02-02 20:42:31 +00:00
Marshall Clow
a27b0cd8ee
added const nullptr tests
...
llvm-svn: 149552
2012-02-01 22:27:24 +00:00
Marshall Clow
e71ddf2fcb
removed duplicated tests - Howard was quicker than me.
...
llvm-svn: 149545
2012-02-01 21:49:28 +00:00
Marshall Clow
62e0f4abf6
Added tests for catching const/non-const nullptr
...
llvm-svn: 149542
2012-02-01 21:37:24 +00:00
Howard Hinnant
60eaa49036
Add test for pointer qualification conversion.
...
llvm-svn: 149541
2012-02-01 21:25:40 +00:00
Howard Hinnant
30025116de
Changed a TODO to a 'maybe some time in the future'.
...
llvm-svn: 149539
2012-02-01 21:12:07 +00:00
Howard Hinnant
8030b7f751
Removed DEBUG statements.
...
llvm-svn: 149538
2012-02-01 21:08:30 +00:00
Howard Hinnant
089123e65f
Remove a TODO regarding where some can_catch are implemented. I opted to make can_catch pure virtual in the top __shim_type_info, and have each sub-class implement its own. There are some repeated definitions, but they are trivial.
...
llvm-svn: 149537
2012-02-01 21:06:46 +00:00
Howard Hinnant
c325fa7705
Add some tests to test catching nullptr with pointers and member pointers. Tests are only activated if #if __has_feature(cxx_nullptr).
...
llvm-svn: 149536
2012-02-01 21:01:52 +00:00
Howard Hinnant
2d6810fbd6
Quash a TODO related to catching pointer-to-member. These tests fail on my copy of gcc-4.2. But I believe the tests to be correct (and they pass for libc++abi). I've enquired on the C++ standards mailing list for a clarification in case I'm wrong. So far I've gotten one response that agrees with me.
...
llvm-svn: 149534
2012-02-01 20:53:21 +00:00
Howard Hinnant
a21f8c2acf
Quash TODO regarding catch by function type. Add tests to back it up.
...
llvm-svn: 149530
2012-02-01 19:42:45 +00:00
Howard Hinnant
26ffb64177
Quash TODO regarding catch by array type. Add tests to back it up.
...
llvm-svn: 149527
2012-02-01 19:21:28 +00:00
Howard Hinnant
69a10f466b
Removing a TODO: can_catch is fundamentally different than search_above_dst. can_catch is looking for an unamiguous public base class of a specific type, but at any address. search_above_dst is looking for an unambiguous public base class of a specific type, *and* at a specific address. Additionally can_catch is run for all types. search_above_dst is only run on class types. So these are only superficially similar. Not similar enough for resuse, at least without making the code unreadable.
...
llvm-svn: 149522
2012-02-01 18:52:35 +00:00
Howard Hinnant
d0bfbb336f
Teach exception_cleanup_func about dependent exceptions.
...
llvm-svn: 149520
2012-02-01 18:44:21 +00:00
Howard Hinnant
8aa78517ab
Treat all exceptions except that the ones that this library throws as foreign. Even other C++ exceptions.
...
llvm-svn: 149518
2012-02-01 18:15:15 +00:00
Howard Hinnant
62efe0b062
Nothing but polishing comments.
...
llvm-svn: 149515
2012-02-01 16:56:40 +00:00
Howard Hinnant
4ca103d14c
Move an error detector to a better place.
...
llvm-svn: 149513
2012-02-01 16:16:11 +00:00
Howard Hinnant
3b22c6c395
Here's a test for catching pointers.
...
llvm-svn: 149459
2012-02-01 00:22:38 +00:00
Howard Hinnant
372e2f4bd4
More test cases concentrating on catching class types.
...
llvm-svn: 149453
2012-01-31 23:52:20 +00:00
Howard Hinnant
eedecf51bb
Some unwinding test cases
...
llvm-svn: 149436
2012-01-31 21:58:58 +00:00
Howard Hinnant
310fcc749d
Back the optimization down from -O3 to -Os. I'm getting an unexplained crasher on -O3. I've looked for a libc++abi bug and can't find one. I'm suspecting clang optimizer bug. But I don't have a good test case at the moment. Deferring investigation on this for now as I will soon be developing more and smaller tests.
...
llvm-svn: 149414
2012-01-31 20:22:59 +00:00
Howard Hinnant
3d97931a86
Drop the stress a notch on dynamic_cast_stress.cpp. Otherwise it occasionally causes clang to crash. Put a noexcept(false) on a throwing destructor in test_vector1.cpp. The test now passes for both C++03 and C++11 modes. Add testit script. All tests are now PASSING :-)
...
llvm-svn: 149413
2012-01-31 20:10:33 +00:00
Howard Hinnant
f8d292eb08
Correct test bug.
...
llvm-svn: 149412
2012-01-31 20:01:06 +00:00
Howard Hinnant
fe2052d635
Have the default unexpected/terminate handler output *demangled* names for the type of exception instead of the mangled name.
...
llvm-svn: 149409
2012-01-31 19:48:06 +00:00
Howard Hinnant
43f5fecdb5
Fix type-o in the comment of the last commit
...
llvm-svn: 149403
2012-01-31 19:05:08 +00:00
Howard Hinnant
6351792447
Found and fixed a bug in __cxa_call_unexpected. If the unexpected_handler rethrows the same exception then needed information gets overwritten in the original exception header. Therefore save it locally before executing the unexpected_handler.
...
llvm-svn: 149400
2012-01-31 18:57:20 +00:00
Howard Hinnant
d96cac1282
Found and fixed bug in personality function: Don't dive into the action table if the action entry is zero.
...
llvm-svn: 149389
2012-01-31 17:15:14 +00:00
Howard Hinnant
d6d4c25ef0
Minor bug fix in __cxa_call_unexpected. Changed std::terminate to detect a caught-but-unhandled exception, and choose the handler out of that if found.
...
llvm-svn: 149329
2012-01-31 01:51:15 +00:00
Howard Hinnant
c9204f6bed
Refactored personality function. Found one bug in scanning exception spec lists.
...
llvm-svn: 149272
2012-01-30 20:16:21 +00:00
Howard Hinnant
2c50972c32
Removed debugging print statements
...
llvm-svn: 149271
2012-01-30 20:13:37 +00:00
Howard Hinnant
47cb854818
Add a descriptive name for a constant. Also I'm at least temporarily waging war on throw specs, both old and new style. Except where we have already publicly exposed the throw spec, I'm getting rid of them. They may come back later. But they seem somewhat prone to cyclic dependencies here. The throw spec implies compiler generated code that this library has to jump to during stack unwinding. I'd like to minimize the possiblity that the code used to properly make that jump is itself creating such jumps.
...
llvm-svn: 149251
2012-01-30 16:07:00 +00:00
Howard Hinnant
3f0d2384aa
Add -fstrict-aliasing -Wstrict-aliasing and change optimization from -Os to -O3
...
llvm-svn: 149250
2012-01-30 16:03:23 +00:00
Howard Hinnant
5bbc597f1e
Put throw() clauses back on these functions in cxxabi.h. This header must be C++03 compatible and these throw specs are consistent with the current cxxabi.h that Apple ships.
...
llvm-svn: 149249
2012-01-30 16:02:11 +00:00
Howard Hinnant
9aa4684fbb
Minor updates to a couple of comments.
...
llvm-svn: 149158
2012-01-28 00:34:46 +00:00
Howard Hinnant
ece71ead6d
Add a little paranoia for testing purposes.
...
llvm-svn: 149157
2012-01-28 00:32:31 +00:00
Howard Hinnant
805036cc83
Minor header fixups for test.
...
llvm-svn: 149156
2012-01-28 00:30:38 +00:00
Howard Hinnant
44e3703639
Silence a warning.
...
llvm-svn: 149155
2012-01-28 00:29:27 +00:00
Howard Hinnant
ad048719a7
Sometimes it takes all day to write a decent comment. This is one of those times, and I'm still not quite sure I have them correct.
...
llvm-svn: 149154
2012-01-28 00:28:31 +00:00
Howard Hinnant
113cf60e0b
These commits are intended to be temporary in nature and are to facilitate the testing of libc++abi.dylib at this point in time.
...
llvm-svn: 148967
2012-01-25 19:27:42 +00:00
Howard Hinnant
db97064263
Add comment documenting extension behavior of __cxa_get_globals_fast().
...
llvm-svn: 148966
2012-01-25 19:19:13 +00:00
Howard Hinnant
5d6b9d28f7
cxa_guard.cpp didn't quite make it on the last commit: Restricted headers to cxa_guard.cpp and abort_messsage.h, and added a comment regarding reentrancy brought up by John McCall. Thanks John.
...
llvm-svn: 148965
2012-01-25 19:02:40 +00:00
Howard Hinnant
2449538500
Restricted headers to cxa_guard.cpp and abort_messsage.h, and added a comment regarding reentrancy brought up by John McCall. Thanks John.
...
llvm-svn: 148963
2012-01-25 18:50:55 +00:00
Howard Hinnant
abc770690a
By changing all of the throw() specs to noexcept I've been able to compile and link all of the source files into a dylib. Prior to this substitution the changed functions were calling __cxa_call_unexpected which isn't implemented yet. However in none of these cases do we actaully want __cxa_call_unexpected to be called. Primative buildit script added.
...
llvm-svn: 148880
2012-01-24 23:42:30 +00:00
Howard Hinnant
7fdfd5d269
Add some needed symbols in exception.cpp and eliminate dependence upon uncaught_exception() from cxa_vector.cpp. libc++abi is very nearly a self-contained (though not complete) library now.
...
llvm-svn: 148866
2012-01-24 21:48:10 +00:00
Howard Hinnant
73ab1864ef
Marshall Clow reminded me that fallback_malloc.cpp was broken out for testing purposes. We've agreed to simply rename fallback_malloc.cpp to fallback_malloc.ipp. Thanks Marshall.
...
llvm-svn: 148863
2012-01-24 21:41:27 +00:00
Howard Hinnant
421bbe5cc5
Add some needed symbols to cxa_new_delete.cpp and put the display() stuff under #DEBUG (again).
...
llvm-svn: 148860
2012-01-24 21:35:18 +00:00
Howard Hinnant
378a59f15c
Got fooled by fallback_malloc.cpp source file: it is really a private header. I've manually included it into the only place it is used: cxa_exception.cpp.
...
llvm-svn: 148854
2012-01-24 21:02:21 +00:00
Howard Hinnant
8b26c3713b
Add new file for public type_info-related signatures
...
llvm-svn: 148853
2012-01-24 21:01:01 +00:00
Howard Hinnant
0d517a4278
CrashReporterClient.h is back, but this time protected with __has_include. Thanks for the suggestion Doug. The use is consistent with how the same header is used in llvm/lib/Support/PrettyStackTrace.cpp (though there autoconfig is used instead of __has_include).
...
llvm-svn: 148851
2012-01-24 19:58:25 +00:00
Howard Hinnant
a9d8ec45f6
Remove dependence upon std::exception_ptr from the default_terminate_handler. Recovered the equivalent functionality at a lower level.
...
llvm-svn: 148830
2012-01-24 18:26:29 +00:00
Howard Hinnant
9e5d74b239
Forgot to include this file in the last commit: Move kOurExceptionClass and kOurDependentExceptionClass from source to header so that they can be used in multiple sources. This is a private header, these constants are not publicly exposed.
...
llvm-svn: 148829
2012-01-24 18:17:40 +00:00
Howard Hinnant
6830b2a493
Move kOurExceptionClass and kOurDependentExceptionClass from source to header so that they can be used in multiple sources. This is a private header, these constants are not publicly exposed.
...
llvm-svn: 148827
2012-01-24 18:15:20 +00:00
Howard Hinnant
82a39907f1
Removed reference to internal header
...
llvm-svn: 148763
2012-01-24 00:52:33 +00:00
Howard Hinnant
e33b2f5c97
Changed my mind about __cxa_uncaught_exception and added it.
...
llvm-svn: 148754
2012-01-24 00:01:31 +00:00
Howard Hinnant
bfbf700151
I renamed abort_message to be a C++ file to simplify my simplistic build script which I'm still working on. I also added a struct for the crash reporter on __APPLE__.
...
llvm-svn: 148752
2012-01-23 23:58:26 +00:00
Howard Hinnant
fad744dd50
A lot of the code in cxa_exception.cpp depends on __cxa_get_globals_fast() returning null if __cxa_get_globals() hasn't been called yet. However it doesn't reliably do that, at least on OS X if __cxa_get_globals_fast() is called prior to pthread_key_create() running. Our choice is to either limit our use of __cxa_get_globals_fast() more than we have, or to have __cxa_get_globals_fast() initialize with pthread_key_create() if necessary. I chose the latter, and replaced pthread_once with a C++11 local static (which should do the same thing).
...
llvm-svn: 148750
2012-01-23 23:55:58 +00:00
Howard Hinnant
671caae892
Added missing #include
...
llvm-svn: 148749
2012-01-23 23:51:56 +00:00
Howard Hinnant
53418916fc
I'm beginning to be able to throw/catch a wide variety of objects.
...
llvm-svn: 148713
2012-01-23 18:39:47 +00:00
Howard Hinnant
699692a04c
Getting started on matching a thrown exception to a catch clause, and setting the adjusted pointer to the caught object appearing in the catch clause.
...
llvm-svn: 148666
2012-01-22 21:47:40 +00:00
Howard Hinnant
afcf7ac5f6
I kept getting confused among the __cxa_exception*, the _Unwind_Exception* and the void* to the thrown object. So I've gone through these two files and attempted to institute a consistent variable naming scheme, and in a few instances, turned void* into a concrete* to have the type system help me out. No change in functionality for this commit is intended.
...
llvm-svn: 148663
2012-01-22 19:14:27 +00:00
Howard Hinnant
1a56ee3798
Add __shim_type_info which fits below std::type_info and above all of the other type_info-derived classes. This is where all of the virtual functions that serve as details of the inner-workings of type_info will live (safely hidden from public view). All type_info objects will be safely down-castable to __shim_type_info, so as to access implementation detail virtual functions. Also temporarily add some print/display statements to each type_info-derived class. This is in support of the continuing development on the personality function.
...
llvm-svn: 148647
2012-01-22 01:23:02 +00:00
Howard Hinnant
242566e552
Change header to generic, instead of implementation specific
...
llvm-svn: 148646
2012-01-22 01:19:20 +00:00
Howard Hinnant
b24c9441d1
One more small optimization: Where possible, for loops that do a search and then try to break out of the loop early, eliminate the attempt to break out of the loop after the last search. And with that, I'm declaring __dynamic_cast done. Though if anyone sees any problems, has suggestions for improvements, or wants to contribute some test cases, that is certainly welcome feedback.
...
llvm-svn: 148246
2012-01-16 18:21:05 +00:00
Howard Hinnant
44a2895a03
Comment smithing. Changed some casts from C-style to C++. And added timings to all of the tests.
...
llvm-svn: 148241
2012-01-16 17:06:51 +00:00
Howard Hinnant
77fb8ab9f2
I think this is getting close on __dynamic_cast. There's been quite a bit of code rearrangement, renaming, and better commenting. This exercise has exposed and fixed a few more bugs. I've also added several more tests (there's definitely a need for more tests here).
...
llvm-svn: 148227
2012-01-16 00:13:46 +00:00
Howard Hinnant
f55694af01
Two bug fixes, several clarifications, and a few comment updates.
...
llvm-svn: 148180
2012-01-14 14:15:43 +00:00
Howard Hinnant
fcf732c7a6
A bug fix involving the updating of path_dst_ptr_to_static_ptr. Some minor code rearrangement optimizations (putting most likely 'if' first in an if-else series. And some major optimizations which involve stopping the search prior to an exhaustive walk over the entire tree. Some of these stops are because an ambiguity is detected earlier. And some of the short circuiting is due to the information from the bits __diamond_shaped_mask and __non_diamond_repeat_mask. The stress test checked in last night is now about 28% faster for the B<Width/2, Depth> -O3 case. I'm still playing with some more optimization possibilities but I'm not sure they will play out.
...
llvm-svn: 148153
2012-01-13 23:06:03 +00:00
Howard Hinnant
50f7eeec9d
Enclosed is a stress test for dynamic_cast. It stresses both libc++abi, and clang itself. It creates a ridiculously large class hierarchy using variadic templates. You can specify both the width and depth of the class hierarchy. And you can specify whether the cast is to the actual run time type, or to an intermediate layer in the class. About 1/3 of the time I compile this, it crashes the compiler. There seems to be an uninitialized area of memory, and I'm probably blowing past an assumption on class hierarchy size within clang (and understandably so). I can get it work most of the time with a class hierarchy width of 20 and a depth of 7. I'm making timings with both -O3 and -Os, using both cast to root and cast to intermediate, on both libc++abi, and gcc's dynamic_cast. I've put the results in a comment/table at the bottom of the test.
...
llvm-svn: 148083
2012-01-13 01:22:31 +00:00
Howard Hinnant
b1ca881191
Oops, forgot to svn add the new test.
...
llvm-svn: 148047
2012-01-12 21:08:25 +00:00
Howard Hinnant
b7d59ec6e1
Put debug print statments under a flag so that I can get a first glimpse at performance. So far I haven't noticed any performance difference between this new __dynamic_cast and gcc's implementation. But I've barely started looking. Also adding a couple of tests which come straight out of the standard.
...
llvm-svn: 148046
2012-01-12 21:06:12 +00:00
Howard Hinnant
af07bfdb67
Fixed a couple of bugs, updated many comments, and am including a comprehensive test for when there are only 3 types in place. I need to do something similar for 4 and maybe more types, but I'm not sure how comprehensive I can make the test at 4 and above types.
...
llvm-svn: 148038
2012-01-12 19:48:14 +00:00
Howard Hinnant
f88480363e
Initial implementaiton of __dynamic_cast. There is still lots of debugging code in here that needs to be stripped out. And many, many unit tests need to be written. And comments and probably code cleanliness needs to be improved. But I *think* the basic algorithm is sound. There also may still be some oportunities for algorithm optimization, I'm not positive.
...
llvm-svn: 147981
2012-01-11 23:49:18 +00:00
Howard Hinnant
d9e7393741
This is a transitory commit for __dynamic_cast. It contains debugging statements that are not intended to be in the finished product. However some of the dubbing statements themselves contain important documentation such as how to navigate a __class_type_info hierarchy, documenting object offset and inheritance access. The intention is that this debugging code will migrate into both actual code and comments. And capturing it here so that there is no chance this stuff will be lost.
...
llvm-svn: 147898
2012-01-11 00:11:17 +00:00
Howard Hinnant
d88ba82a47
Getting a start on the typeinfo infrastructure.
...
llvm-svn: 147776
2012-01-09 17:10:00 +00:00
Howard Hinnant
86b4dfac01
First brush with testing __gxx_personality_v0 reveals there is still a long way to go. But my understanding of what it is supposed to do continues to improve. I am currently contemplating whether I need to implement typeinfo before completing __gxx_personality_v0 in order to get matching catch handlers correct.
...
llvm-svn: 147761
2012-01-08 23:50:46 +00:00
Howard Hinnant
7530f19d03
Add a few TODO's and FIXME's. Making notes as I go along, but not slowing down to fix these yet. Just don't want anything to fall through the cracks.
...
llvm-svn: 147760
2012-01-08 23:40:41 +00:00
Howard Hinnant
5dc3179e5d
Correct comment regarding members of __cxa_dependent_exception. Actually it is useful to disguise a __cxa_dependent_exception as a __cxa_exception by filling in most (not all) of these members at __cxa_dependent_exception construction time. That way most routines don't have to care which kind of exception they have.
...
llvm-svn: 147759
2012-01-08 23:39:14 +00:00
Howard Hinnant
d3dba31762
__gxx_personality_v0 update. This is completely untested code. But my brain is scrambled and I wanted to get it checked in. Code review from anyone who knows anything at all about personality functions would be much appreciated. What is in here is borrowed heavily from llvm/examples/ExceptionDemo/ExceptionDemo.cpp. There are some calls to abort() that should probably be changed to return an error code instead. There may be encodings under readEncodedPointer that need to be implemented. And my handling of type_info is almost a complete guess.
...
llvm-svn: 147680
2012-01-06 20:39:47 +00:00
Marshall Clow
d2bab35080
Improved comment to explain why we can use __cxa_get_globals_fast here
...
llvm-svn: 147554
2012-01-04 22:18:10 +00:00
Howard Hinnant
66d9327b80
Just getting started on the personality routine. This is just a skeleton. Still learning how to fill it in...
...
llvm-svn: 147547
2012-01-04 20:49:43 +00:00
Marshall Clow
f368486f4c
Better comment
...
llvm-svn: 147532
2012-01-04 14:56:09 +00:00
Marshall Clow
f83663a9cd
Don't allocate TLS storage when checking to see if an exception has been thrown - really
...
llvm-svn: 147497
2012-01-03 23:26:09 +00:00
Marshall Clow
3e417e7a5c
Don't allocate TLS storage when checking to see if an exception has been thrown
...
llvm-svn: 147492
2012-01-03 23:10:20 +00:00
Howard Hinnant
f5bde09cc1
credits adjustment
...
llvm-svn: 147148
2011-12-22 16:00:06 +00:00
Marshall Clow
1de4fc0dfa
Updated __cxa_current_exception_type to call __cxa_get_globals_fast - will not allocate globals
...
llvm-svn: 147147
2011-12-22 15:45:05 +00:00
Howard Hinnant
2aa433398a
Updated spec.html regarding __cxa_uncaught_exception.
...
llvm-svn: 147110
2011-12-22 00:03:36 +00:00
Howard Hinnant
22f28b2d52
Forgot to increment uncaughtExceptions in __cxa_rethrow_primary_exception
...
llvm-svn: 147108
2011-12-21 23:48:05 +00:00
Howard Hinnant
e04f51662c
Added __cxa_increment_exception_refcount, __cxa_decrement_exception_refcount, __cxa_current_primary_exception, __cxa_rethrow_primary_exception
...
llvm-svn: 147106
2011-12-21 23:32:11 +00:00
Howard Hinnant
72a05a9198
Add new and delete operators
...
llvm-svn: 146989
2011-12-20 20:38:05 +00:00
Howard Hinnant
bf8a39bb94
Fixed several bugs, implemented support for vector types, and cleaned out dead code.
...
llvm-svn: 146677
2011-12-15 20:02:15 +00:00
Howard Hinnant
7a084fdd39
Fix size calculation for pointer to member function
...
llvm-svn: 146463
2011-12-13 01:23:16 +00:00
Howard Hinnant
58926c9a9b
Made some minor tweaks to __cxa_rethrow
...
llvm-svn: 146396
2011-12-12 19:11:42 +00:00
Howard Hinnant
7fcad54836
Added dependent exception support to __cxa_current_exception_type
...
llvm-svn: 146381
2011-12-12 18:16:10 +00:00
Howard Hinnant
8de583abf2
Added support for <special-name> ::= TC <first type> <number> _ <second type> # construction vtable for second-in-first, and for <special-name> ::= GR <object name> # reference temporary for object
...
llvm-svn: 146274
2011-12-09 20:07:56 +00:00
Howard Hinnant
6ccae15ef0
Modified __cxa_end_catch to handle dependent exceptions.
...
llvm-svn: 146172
2011-12-08 19:35:18 +00:00
Howard Hinnant
5ec9183afc
Reviewing cxa_exception.cpp and marking as implemented as I go. Not marking as implemented on arm when I'm not sure about that platform.
...
llvm-svn: 146072
2011-12-07 21:16:40 +00:00
Howard Hinnant
b3344a3ac7
Added __cxa_allocate_dependent_exception and __cxa_free_dependent_exception and marked them as done.
...
llvm-svn: 146045
2011-12-07 18:30:06 +00:00
Howard Hinnant
dfb34fcb1a
Substituted std::get_terminate() for direct access to the handler function pointer (which is now a static in cxa_handlers.cpp). This has the advantage of going through the atomic API and so is less likely to cause a data race. Ditto for unexpected.
...
llvm-svn: 145951
2011-12-06 19:02:03 +00:00
Howard Hinnant
987afbeede
Add/update copyright notices
...
llvm-svn: 145949
2011-12-06 18:01:47 +00:00
Howard Hinnant
2642af9e23
terminate, unexpected and new handlers. If terminating while an exception is unwinding, an attempt is made to print out the what() string if the exception is derived from std::exception. __terminate(handler) and __unexpected(handler) helpers are present in anticipation of other parts of libc++abi needing to call these interfaces with custom handlers.
...
llvm-svn: 145948
2011-12-06 17:51:25 +00:00
Howard Hinnant
dc82cca6bf
Updated heuristic regulating small string buffer
...
llvm-svn: 145543
2011-12-01 00:08:59 +00:00
Howard Hinnant
148b3f64ec
Add alignment requirement to char buffer
...
llvm-svn: 145277
2011-11-28 21:03:21 +00:00
Marshall Clow
9b454bc912
reformatted to match Clang style; thanks to John McCall for the nudge
...
llvm-svn: 137623
2011-08-15 18:06:47 +00:00
Howard Hinnant
26a9d23657
demangler: Drop preceeding () from function types, but not from pointers and references to function types
...
llvm-svn: 137469
2011-08-12 17:33:10 +00:00
Marshall Clow
8769449b61
First cut at exception handling; missing dependent exceptions. Next step: tests
...
llvm-svn: 137118
2011-08-09 15:09:41 +00:00
Howard Hinnant
49b607a2cd
Silence some -Wall warnings pointed out by Marshall Clow
...
llvm-svn: 137047
2011-08-08 15:49:07 +00:00
Marshall Clow
7c9f1fa9cf
Remove include reference to non-existant file cxa_exception_storage.hpp
...
llvm-svn: 137046
2011-08-08 15:12:08 +00:00
Nick Kledzik
2dfc79b19e
make cxxabi.h safe for C code to include
...
llvm-svn: 136682
2011-08-02 05:15:26 +00:00
Nick Kledzik
1c839a945b
use LIBCXXABI_NORETURN
...
llvm-svn: 136681
2011-08-02 05:01:31 +00:00
Nick Kledzik
12a10bc046
make LIBCXXABI_NORETURN be the right attribute
...
llvm-svn: 136680
2011-08-02 05:01:17 +00:00
Nick Kledzik
7cb4926da1
use abort_message() for pthread errors in __cxa_get_globals
...
llvm-svn: 136672
2011-08-02 01:34:26 +00:00
Nick Kledzik
18ab5f4164
use abort_message()
...
llvm-svn: 136671
2011-08-02 01:19:07 +00:00
Nick Kledzik
49cbb02a6a
move abort_message() to its own file
...
llvm-svn: 136670
2011-08-02 01:18:14 +00:00
Nick Kledzik
d5b690d39c
add abort_message() utility function
...
llvm-svn: 136669
2011-08-02 01:16:03 +00:00
Nick Kledzik
476e600cd4
Added kledzik to CREDITS.TXT
...
llvm-svn: 136667
2011-08-02 01:05:24 +00:00
Marshall Clow
b226908bea
Updated comments
...
llvm-svn: 135909
2011-07-25 15:00:11 +00:00
Marshall Clow
e41bb4dd69
Added copyright header
...
llvm-svn: 135601
2011-07-20 18:41:23 +00:00
Howard Hinnant
c6b4318b9a
Update status: http://libcxxabi.llvm.org/spec.html . Looking good! :-)
...
llvm-svn: 135590
2011-07-20 16:32:57 +00:00
Marshall Clow
e2dcb75b2e
Memory manangement routines for exception objects
...
llvm-svn: 135587
2011-07-20 15:04:39 +00:00
Marshall Clow
1df50ca6a2
Exception handling stuctures, and thread-local variables for exception handling
...
llvm-svn: 135586
2011-07-20 14:53:53 +00:00
Marshall Clow
60fa2d232a
Fixed struct/class mismatch for std::type_info and added NORETURN flags
...
llvm-svn: 135584
2011-07-20 14:27:46 +00:00
Howard Hinnant
4af8869934
Update by Marshall Clow
...
llvm-svn: 135397
2011-07-18 16:38:32 +00:00
Howard Hinnant
08ad085712
A stawman specification for libc++abi and status page
...
llvm-svn: 135181
2011-07-14 20:16:50 +00:00
Howard Hinnant
471e111324
In cxa_demangle.cpp, rewrite __parse_unresolved_name to reflect updated understanding and sync with updated clang mangling. Also fix think-o in __parse_encoding enabling the parsing of trailing .eh and .b.
...
llvm-svn: 133632
2011-06-22 19:27:39 +00:00
Marshall Clow
92091dbe41
Clean up the vector tests
...
llvm-svn: 132921
2011-06-13 17:57:10 +00:00
Marshall Clow
280ddee8bd
Implement vector new and delete functionality
...
llvm-svn: 132832
2011-06-10 03:40:19 +00:00
Marshall Clow
8da97113c2
Added Marshall to CREDITS.TXT as requested
...
llvm-svn: 132754
2011-06-08 16:58:01 +00:00
Howard Hinnant
575498b52f
tabs to spaces
...
llvm-svn: 132729
2011-06-07 19:56:49 +00:00
Nick Lewycky
69e35a7f55
Add support for the ARM EABI variant of the __cxa_guard methods, controlled by
...
the LIBCXXABI_ARMEABI macro.
llvm-svn: 132723
2011-06-07 18:46:10 +00:00
Nick Lewycky
6fde150697
Add more tests for cxa_guard methods. This includes our first two tests using
...
actual threads!
There's no build file for libcxxabi, so I'll tell you that I built it with this:
$ g++-4.6 -pthread -std=gnu++0x test_guard.cpp ../src/cxa_guard.o -o test_guard
llvm-svn: 132644
2011-06-04 18:01:24 +00:00
Marshall Clow
f8da5b22af
Tests for bad_typeid and bad_cast
...
llvm-svn: 132545
2011-06-03 13:54:37 +00:00
Marshall Clow
ad3dea06a9
Added __cxa_bad_cast and __cxa_bad_typeid and placeholder NORETURN macro
...
llvm-svn: 132524
2011-06-03 02:04:41 +00:00
Howard Hinnant
4a88971ac1
Introduce cxa_virtual.cpp and cxa_guard.cpp. Contributed by Nick Lewycky, Howard Hinnant and John McCall
...
llvm-svn: 132009
2011-05-24 22:01:16 +00:00
Howard Hinnant
f3f1a9c942
Add goal
...
llvm-svn: 131703
2011-05-19 23:38:38 +00:00
Howard Hinnant
30ab971979
Fix think-o
...
llvm-svn: 131700
2011-05-19 23:37:21 +00:00
Howard Hinnant
d13581e492
testing
...
llvm-svn: 131694
2011-05-19 22:57:05 +00:00
Howard Hinnant
58bc7ff892
testing
...
llvm-svn: 131693
2011-05-19 22:56:33 +00:00
Howard Hinnant
7b0290da3f
Add Mac OS X as supported platform.
...
llvm-svn: 131686
2011-05-19 22:03:11 +00:00
Howard Hinnant
4ed80a3372
Add Mac OS X as supported platform.
...
llvm-svn: 131685
2011-05-19 22:02:38 +00:00
Howard Hinnant
d3da57f99b
initial import
...
llvm-svn: 130921
2011-05-05 15:27:28 +00:00