llvm-project/clang/lib/AST
David Majnemer 7c23707174 MS ABI: Implement support for throwing a C++ exception
Throwing a C++ exception, under the MS ABI, is implemented using three
components:
- ThrowInfo structure which contains information like CV qualifiers,
  what destructor to call and a pointer to the CatchableTypeArray.
- In a significant departure from the Itanium ABI, copying by-value
  occurs in the runtime and not at the catch site.  This means we need
  to enumerate all possible types that this exception could be caught as
  and encode the necessary information to convert from the exception
  object's type to the catch handler's type.  This includes complicated
  derived to base conversions and the execution of copy-constructors.

N.B. This implementation doesn't support the execution of a
copy-constructor from within the runtime for now.  Adding support for
that functionality is quite difficult due to things like default
argument expressions which may evaluate arbitrary code hiding in the
copy-constructor's parameters.

Differential Revision: http://reviews.llvm.org/D8066

llvm-svn: 231328
2015-03-05 00:46:22 +00:00
..
APValue.cpp Simplify creation of a bunch of ArrayRefs by using None, makeArrayRef or just letting them be implicitly created. 2014-08-27 06:28:36 +00:00
ASTConsumer.cpp Sort all of Clang's files under 'lib', and fix up the broken headers 2012-12-04 09:13:33 +00:00
ASTContext.cpp Sema: Properly initialize the thrown exception object 2015-03-03 01:50:05 +00:00
ASTDiagnostic.cpp Update assumption in template diffing about integer template arguments. 2015-02-26 02:40:48 +00:00
ASTDumper.cpp Enhance printing SizeOfPackExpr in dump. 2015-02-16 19:58:41 +00:00
ASTImporter.cpp Rename RefersToCapturedVariable to RefersToEnclosingVariableOrCapture, NFC 2015-01-12 10:17:46 +00:00
ASTTypeTraits.cpp Fix bug in DynTypedMatcher::constructVariadic() that would cause false negatives. 2014-10-06 13:14:30 +00:00
AttrImpl.cpp Refactor the Microsoft inheritance attribute handling so that it no longer has special treatment. Also fixes a minor bug where the attributes were being parsed as though they were GNU-style attributes when they were in fact keyword attributes. 2013-12-18 23:44:18 +00:00
CMakeLists.txt MS ABI: Don't use the Itanium scheme for numbering lambdas 2014-08-22 04:22:50 +00:00
CXXABI.h Header guard canonicalization, clang part. 2014-08-13 16:25:19 +00:00
CXXInheritance.cpp CXXInheritance: Modernize removal of hidden virtual base class decls. 2015-02-11 19:09:16 +00:00
Comment.cpp Use llvm::makeArrayRef instead of explicitly calling ArrayRef constructor and mentioning the type. This works now that we have a conversion from ArrayRef<T*> to ArrayRef<const T*>. 2014-08-30 16:55:39 +00:00
CommentBriefParser.cpp Some refactoring in my patch on document 2013-03-02 02:39:57 +00:00
CommentCommandTraits.cpp Fix for PR21254 - Assertion in comment parser 2014-10-15 16:18:20 +00:00
CommentLexer.cpp Fix some cases where StringRef was being passed by const reference. Remove const from some other StringRefs since its implicitly const already. 2014-08-30 16:55:52 +00:00
CommentParser.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
CommentSema.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
Decl.cpp Cleanup: remove artificial division between lookup results and const lookup 2015-02-21 02:45:19 +00:00
DeclBase.cpp Add clang support for Objective-C application extensions. 2015-03-02 19:01:14 +00:00
DeclCXX.cpp Cleanup: remove artificial division between lookup results and const lookup 2015-02-21 02:45:19 +00:00
DeclFriend.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
DeclGroup.cpp Sort all of Clang's files under 'lib', and fix up the broken headers 2012-12-04 09:13:33 +00:00
DeclObjC.cpp Fix ObjCInterfaceDecl::getCategoryMethod() and give it a caller. No behavior change. 2015-03-02 01:12:28 +00:00
DeclOpenMP.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
DeclPrinter.cpp Objective-C. Assortment of improvements pretty printing 2014-10-03 20:05:33 +00:00
DeclTemplate.cpp [modules] Ensure we've imported all declarations of a template before 2015-02-24 02:44:23 +00:00
DeclarationName.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
Expr.cpp Sema: Parenthesized bound destructor member expressions can be called 2015-02-25 17:36:15 +00:00
ExprCXX.cpp Sema: Parenthesized bound destructor member expressions can be called 2015-02-25 17:36:15 +00:00
ExprClassification.cpp Sema: Parenthesized bound destructor member expressions can be called 2015-02-25 17:36:15 +00:00
ExprConstant.cpp Add support for generating MIPS legacy NaN 2015-02-26 18:19:22 +00:00
ExternalASTSource.cpp Move virtual methods out of line. 2014-05-21 14:19:22 +00:00
InheritViz.cpp Refer to error_code with the std prefix. 2014-06-12 20:37:59 +00:00
ItaniumCXXABI.cpp Fix the issue of mangling of local anonymous unions (Itanium C++ ABI): 2014-12-12 16:17:46 +00:00
ItaniumMangle.cpp Implement Control Flow Integrity for virtual calls. 2015-02-20 20:30:56 +00:00
Makefile
Mangle.cpp This patch fixes a crash involving use of predefined 2014-12-02 18:42:51 +00:00
MicrosoftCXXABI.cpp Adds 'override' to overriding methods. NFC. 2014-10-01 16:56:40 +00:00
MicrosoftMangle.cpp MS ABI: Implement support for throwing a C++ exception 2015-03-05 00:46:22 +00:00
NSAPI.cpp New ObjC warning: circular containers. 2015-03-04 17:55:52 +00:00
NestedNameSpecifier.cpp -ms-extensions: Implement __super scope specifier (PR13236). 2014-09-26 00:28:20 +00:00
ParentMap.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
RawCommentList.cpp Comment parsing: when comment ranges are deserialized from multiple modules, 2014-03-27 15:40:39 +00:00
RecordLayout.cpp CXXInfo memory should be released after calling the destructor 2014-05-24 07:19:25 +00:00
RecordLayoutBuilder.cpp Reland r230446, "MS ABI: Try to respect external AST source record layouts" 2015-02-25 19:17:45 +00:00
SelectorLocationsKind.cpp
Stmt.cpp Various fixes to mangling of list-initialization. 2015-02-05 06:15:50 +00:00
StmtIterator.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
StmtPrinter.cpp PR22465: when performing list-initialization for a class type C, if we see an 2015-02-05 07:02:11 +00:00
StmtProfile.cpp Preserve numeric literal suffixes during type canonicalization. 2014-11-20 03:37:32 +00:00
StmtViz.cpp
TemplateBase.cpp Use APSInt::isSameValue instead of operator== in a place where two APSInt's 2015-01-09 00:58:16 +00:00
TemplateName.cpp [C++11] Use 'nullptr'. AST edition. 2014-05-12 05:36:57 +00:00
Type.cpp Remove support for pnaclcall attribute 2015-01-28 20:24:52 +00:00
TypeLoc.cpp Fix initializing TypeOfTypeLoc 2014-10-24 13:52:55 +00:00
TypePrinter.cpp TypePrinter print __restrict if not in C99 mode 2015-03-03 23:58:09 +00:00
VTTBuilder.cpp Update for LLVM API change to make Small(Ptr)Set::insert return pair<iterator, bool> as per the C++ standard's associative container concept. 2014-11-19 07:49:47 +00:00
VTableBuilder.cpp Reland (2x) r230314, "Fix codegen for virtual methods that are (re-) exported from multiple modules." 2015-02-25 19:17:48 +00:00