2017-06-07 12:48:45 +08:00
|
|
|
set(LLVM_LINK_COMPONENTS
|
2017-06-07 12:48:49 +08:00
|
|
|
BinaryFormat
|
2017-06-07 12:48:45 +08:00
|
|
|
Support
|
|
|
|
)
|
2011-02-12 07:46:38 +08:00
|
|
|
|
2008-10-26 08:56:18 +08:00
|
|
|
add_clang_library(clangAST
|
2008-11-20 02:46:39 +08:00
|
|
|
APValue.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
ASTConsumer.cpp
|
|
|
|
ASTContext.cpp
|
2010-02-10 06:26:47 +08:00
|
|
|
ASTDiagnostic.cpp
|
2012-12-13 21:59:55 +08:00
|
|
|
ASTDumper.cpp
|
2010-03-09 04:56:29 +08:00
|
|
|
ASTImporter.cpp
|
2018-12-17 21:53:12 +08:00
|
|
|
ASTImporterLookupTable.cpp
|
2017-04-28 08:31:30 +08:00
|
|
|
ASTStructuralEquivalence.cpp
|
2013-06-20 02:45:24 +08:00
|
|
|
ASTTypeTraits.cpp
|
2010-01-10 22:38:13 +08:00
|
|
|
AttrImpl.cpp
|
2009-10-07 01:59:45 +08:00
|
|
|
CXXInheritance.cpp
|
2012-07-06 08:28:32 +08:00
|
|
|
Comment.cpp
|
2012-06-27 04:39:18 +08:00
|
|
|
CommentBriefParser.cpp
|
2012-08-09 08:16:26 +08:00
|
|
|
CommentCommandTraits.cpp
|
2012-06-27 04:39:18 +08:00
|
|
|
CommentLexer.cpp
|
2012-07-06 08:28:32 +08:00
|
|
|
CommentParser.cpp
|
|
|
|
CommentSema.cpp
|
[C++2a] Implement operator<=> CodeGen and ExprConstant
Summary:
This patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.
The main changes are:
* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don't need to store (and duplicate) the required expressions in the BinaryOperator AST nodes.
* Implement [expr.spaceship] checking, including diagnosing narrowing conversions.
* Implement `ExprConstant` for builtin spaceship operators.
* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.
* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.
Reviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall
Reviewed By: rjmccall
Subscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits
Differential Revision: https://reviews.llvm.org/D45476
llvm-svn: 331677
2018-05-08 05:07:10 +08:00
|
|
|
ComparisonCategories.cpp
|
2017-08-24 00:28:26 +08:00
|
|
|
DataCollection.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
Decl.cpp
|
2010-03-23 02:16:06 +08:00
|
|
|
DeclarationName.cpp
|
2009-07-16 05:08:41 +08:00
|
|
|
DeclBase.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
DeclCXX.cpp
|
2010-03-11 15:50:04 +08:00
|
|
|
DeclFriend.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
DeclGroup.cpp
|
|
|
|
DeclObjC.cpp
|
2013-03-22 14:34:35 +08:00
|
|
|
DeclOpenMP.cpp
|
2009-05-30 08:08:05 +08:00
|
|
|
DeclPrinter.cpp
|
2009-02-05 03:02:06 +08:00
|
|
|
DeclTemplate.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
Expr.cpp
|
2010-06-28 23:09:07 +08:00
|
|
|
ExprClassification.cpp
|
2009-07-16 05:08:41 +08:00
|
|
|
ExprConstant.cpp
|
2010-03-23 02:16:06 +08:00
|
|
|
ExprCXX.cpp
|
2015-09-30 06:28:44 +08:00
|
|
|
ExprObjC.cpp
|
2017-04-12 03:33:35 +08:00
|
|
|
ExternalASTMerger.cpp
|
2011-02-28 22:32:11 +08:00
|
|
|
ExternalASTSource.cpp
|
2018-11-02 21:14:11 +08:00
|
|
|
FormatString.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
InheritViz.cpp
|
2010-08-16 11:33:14 +08:00
|
|
|
ItaniumCXXABI.cpp
|
2011-01-14 02:57:25 +08:00
|
|
|
ItaniumMangle.cpp
|
2019-05-14 05:39:55 +08:00
|
|
|
JSONNodeDumper.cpp
|
2011-01-14 02:57:25 +08:00
|
|
|
Mangle.cpp
|
2010-08-16 11:33:14 +08:00
|
|
|
MicrosoftCXXABI.cpp
|
2011-01-14 02:57:25 +08:00
|
|
|
MicrosoftMangle.cpp
|
Introduce a representation for types that we referred to via a
qualified name, e.g.,
foo::x
so that we retain the nested-name-specifier as written in the source
code and can reproduce that qualified name when printing the types
back (e.g., in diagnostics). This is PR3493, which won't be complete
until finished the other tasks mentioned near the end of this commit.
The parser's representation of nested-name-specifiers, CXXScopeSpec,
is now a bit fatter, because it needs to contain the scopes that
precede each '::' and keep track of whether the global scoping
operator '::' was at the beginning. For example, we need to keep track
of the leading '::', 'foo', and 'bar' in
::foo::bar::x
The Action's CXXScopeTy * is no longer a DeclContext *. It's now the
opaque version of the new NestedNameSpecifier, which contains a single
component of a nested-name-specifier (either a DeclContext * or a Type
*, bitmangled).
The new sugar type QualifiedNameType composes a sequence of
NestedNameSpecifiers with a representation of the type we're actually
referring to. At present, we only build QualifiedNameType nodes within
Sema::getTypeName. This will be extended to other type-constructing
actions (e.g., ActOnClassTemplateId).
Also on the way: QualifiedDeclRefExprs will also store a sequence of
NestedNameSpecifiers, so that we can print out the property
nested-name-specifier. I expect to also use this for handling
dependent names like Fibonacci<I - 1>::value.
llvm-svn: 67265
2009-03-19 08:18:19 +08:00
|
|
|
NestedNameSpecifier.cpp
|
2012-03-07 04:05:56 +08:00
|
|
|
NSAPI.cpp
|
2017-02-22 09:11:25 +08:00
|
|
|
ODRHash.cpp
|
2018-11-02 21:14:11 +08:00
|
|
|
OSLog.cpp
|
2015-10-02 21:41:04 +08:00
|
|
|
OpenMPClause.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
ParentMap.cpp
|
2018-11-02 21:14:11 +08:00
|
|
|
PrintfFormatString.cpp
|
2017-11-08 18:39:03 +08:00
|
|
|
QualTypeNames.cpp
|
2012-06-20 17:53:52 +08:00
|
|
|
RawCommentList.cpp
|
2010-03-09 04:56:29 +08:00
|
|
|
RecordLayout.cpp
|
2009-07-19 08:40:45 +08:00
|
|
|
RecordLayoutBuilder.cpp
|
2018-11-02 21:14:11 +08:00
|
|
|
ScanfFormatString.cpp
|
2011-10-03 14:36:51 +08:00
|
|
|
SelectorLocationsKind.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
Stmt.cpp
|
2015-10-02 21:41:04 +08:00
|
|
|
StmtCXX.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
StmtIterator.cpp
|
2015-10-02 21:41:04 +08:00
|
|
|
StmtObjC.cpp
|
|
|
|
StmtOpenMP.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
StmtPrinter.cpp
|
2009-07-28 08:33:38 +08:00
|
|
|
StmtProfile.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
StmtViz.cpp
|
2009-10-29 15:48:15 +08:00
|
|
|
TemplateBase.cpp
|
2009-04-02 03:11:05 +08:00
|
|
|
TemplateName.cpp
|
2018-12-06 05:12:39 +08:00
|
|
|
TextNodeDumper.cpp
|
2008-10-26 08:56:18 +08:00
|
|
|
Type.cpp
|
2009-08-19 20:02:15 +08:00
|
|
|
TypeLoc.cpp
|
2009-11-10 08:39:07 +08:00
|
|
|
TypePrinter.cpp
|
2011-09-26 09:57:12 +08:00
|
|
|
VTableBuilder.cpp
|
2011-09-26 09:56:24 +08:00
|
|
|
VTTBuilder.cpp
|
2009-03-17 07:06:59 +08:00
|
|
|
|
2014-02-26 14:41:29 +08:00
|
|
|
LINK_LIBS
|
2012-06-21 09:30:21 +08:00
|
|
|
clangBasic
|
|
|
|
clangLex
|
|
|
|
)
|