llvm-project/clang/test/PCH
Eric Fiselier 0683c0e68d [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-07 21:07:10 +00:00
..
Inputs [C++2a] Implement operator<=> CodeGen and ExprConstant 2018-05-07 21:07:10 +00:00
__va_list_tag-typedef.c [Clang][ARM] __va_list declaration is not saved in ASTContext causing compilation error or crash 2016-03-30 21:30:30 +00:00
__va_list_tag.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
arc.m Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
asm.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
asm.h
attrs-PR8406.c
attrs.c [Sema] Allow unmarked overloadable functions. 2017-06-27 21:31:31 +00:00
badpch.c
blocks.c
blocks.h
builtin-macro.c Don't assert when redefining a built-in macro in a PCH, PR29119 2016-12-09 17:32:52 +00:00
builtins.c
builtins.h
captured-stmt.cpp
case-insensitive-include.c [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
chain-categories.m Stop back-patching 'readonly' Objective-C properties with 'readwrite' ones. 2015-11-03 01:15:46 +00:00
chain-categories2.m
chain-class-extension.m
chain-conversion-lookup.cpp
chain-cxx.cpp
chain-decls.c
chain-default-argument-instantiation.cpp Only instantiate a default argument once. 2016-01-06 22:34:54 +00:00
chain-empty-initial-namespace.cpp
chain-ext_vector.c
chain-external-defs.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
chain-friend-instantiation.cpp
chain-implicit-definition.cpp
chain-invalid-code.cpp [PCH/preamble] Make sure that if the preamble/PCH was serialized with errors that we set diagnostic engine state appropriately. 2016-07-13 20:35:26 +00:00
chain-late-anonymous-namespace.cpp
chain-macro-override.c
chain-macro.c
chain-openmp-threadprivate.cpp [MS] Fix tests after r327738 that only fail with a default Windows target 2018-03-16 20:53:13 +00:00
chain-pending-instantiations.cpp
chain-predecl.h
chain-predecl.m
chain-remap-types.m
chain-selectors.m
chain-staticvar-instantiation.cpp
chain-trivial.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
chain-typo-corrections.cpp Add the test case from PR 14044 to ensure it doesn't regress. 2015-05-08 17:39:48 +00:00
changed-files.c
check-deserializations.cpp Internal-linkage variables with constant-evaluatable initializers do not need to be emitted. (Also reduces the set of variables that need to be eagerly deserialized when using PCH / modules.) 2015-08-19 20:49:38 +00:00
cmdline-include.c
cmdline-include1.h
cmdline-include2.h
coroutines.cpp [coroutines] Add serialization/deserialization of coroutines 2017-07-25 18:01:49 +00:00
crash-12631281.cpp
cuda-kernel-call.cu Move all CUDA testing inputs to Inputs/ subdirectory inside the tests. 2014-04-28 22:21:28 +00:00
cxx-alias-decl.cpp
cxx-alias-decl.h
cxx-chain-function-template.cpp
cxx-char-literal.cpp Properly track that a character literal is UTF-8, and pretty print the prefix properly. 2016-01-07 20:59:26 +00:00
cxx-constexpr.cpp
cxx-dependent-sized-ext-vector.cpp [Serialization] Serialize DependentSizedExtVectorType 2017-03-22 10:04:48 +00:00
cxx-exprs.cpp
cxx-for-range.cpp
cxx-for-range.h
cxx-friends.cpp
cxx-friends.h
cxx-functions.cpp
cxx-functions.h
cxx-implicit-moves.cpp
cxx-key-functions.cpp Fix an iterator invalidation issue: deserializing a key function can write to 2014-07-07 06:38:20 +00:00
cxx-mangling.cpp Account for calling convention specifiers in function definitions in IR test cases 2015-06-29 17:29:50 +00:00
cxx-member-init.cpp
cxx-method.cpp
cxx-ms-function-specialization-class-scope.cpp Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
cxx-ms-function-specialization-class-scope.h
cxx-namespaces.cpp Modify behavior of -ast-dump-lookups: if -ast-dump is not also provided, dump 2014-08-11 22:11:07 +00:00
cxx-namespaces.h
cxx-offsetof-base.cpp
cxx-offsetof-base.h
cxx-reference.cpp
cxx-reference.h
cxx-required-decls.cpp Bring r325915 back. 2018-02-23 19:30:48 +00:00
cxx-required-decls.h
cxx-static_assert.cpp
cxx-templates.cpp Don't mark a member as a member specialization until we know we're keeping the specialization. 2017-05-09 23:02:10 +00:00
cxx-templates.h Don't mark a member as a member specialization until we know we're keeping the specialization. 2017-05-09 23:02:10 +00:00
cxx-trailing-return.cpp
cxx-traits.cpp [Sema] Add __is_aggregate type-trait 2017-04-12 22:12:15 +00:00
cxx-traits.h [Sema] Add __is_aggregate type-trait 2017-04-12 22:12:15 +00:00
cxx-typeid.cpp
cxx-typeid.h
cxx-using.cpp
cxx-using.h
cxx-variadic-templates-with-default-params.cpp PR25271: When attaching default template arguments to redeclarations of a 2016-02-04 22:54:41 +00:00
cxx-variadic-templates.cpp
cxx-variadic-templates.h
cxx0x-default-delete.cpp
cxx0x-delegating-ctors.cpp
cxx1y-decltype-auto.cpp
cxx1y-deduced-return-type.cpp
cxx1y-default-initializer.cpp PR29097: add an update record when we instantiate the default member 2016-08-24 21:25:37 +00:00
cxx1y-init-captures.cpp
cxx1y-lambdas.mm Run dos2unix on test/PCH/cxx1y-lambdas.mm 2015-04-01 20:21:34 +00:00
cxx1y-variable-templates.cpp [Sema] Emit a better diagnostic when variable redeclarations disagree 2015-07-14 20:08:49 +00:00
cxx1z-aligned-alloc.cpp P0035R4: add std::align_val_t overloads of operator new/delete in C++17 mode. 2016-09-29 22:49:46 +00:00
cxx1z-decomposition.cpp P0217R3: serialization/deserialization support for c++17 decomposition declarations. 2016-08-12 02:21:25 +00:00
cxx1z-init-statement.cpp P0305R0: Semantic analysis and code generation for C++17 init-statement for 'if' and 'switch': 2016-07-14 00:11:03 +00:00
cxx1z-init-statement.h P0305R0: Semantic analysis and code generation for C++17 init-statement for 'if' and 'switch': 2016-07-14 00:11:03 +00:00
cxx1z-using-declaration.cpp [c++1z] P0195R2: Support pack-expansion of using-declarations. 2016-12-20 21:35:28 +00:00
cxx2a-bitfield-init.cpp [c++2a] P0683R1: Permit default member initializers for bit-fields. 2017-08-28 00:28:14 +00:00
cxx2a-compare.cpp [C++2a] Implement operator<=> CodeGen and ExprConstant 2018-05-07 21:07:10 +00:00
cxx11-constexpr.cpp
cxx11-enum-template.cpp
cxx11-exception-spec.cpp When the exception specification for a function in an imported PCH or module is 2014-03-20 21:47:22 +00:00
cxx11-inheriting-ctors.cpp P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991: 2016-06-28 19:03:57 +00:00
cxx11-lambdas.mm Implement C++ [basic.link]p8. 2017-09-20 07:22:00 +00:00
cxx11-statement-attributes.cpp P0188R1: add support for standard [[fallthrough]] attribute. This is almost 2016-03-08 00:32:55 +00:00
cxx11-user-defined-literals.cpp
cxx_exprs.cpp
cxx_exprs.h
datetime.c Don't use fprintf to emit this diagnostic! 2015-09-01 02:35:58 +00:00
debug-info-limited-struct.c Stop messing with the 'g' group of options in CompilerInvocation. 2015-10-08 04:24:12 +00:00
debug-info-limited-struct.h
debug-info-pch-path.c Remove 24 instances of 'REQUIRES: shell' 2016-10-20 23:11:45 +00:00
decl-in-prototype.c Relax IRgen check in decl-in-prototype.c to match signext on PPC64 2016-12-09 17:56:04 +00:00
designated-init.c
designated-init.c.h Implementing C99 partial re-initialization behavior (DR-253) 2015-06-10 00:27:52 +00:00
different-diagnostic-level.c
different-linker-version.c [PCH/Modules] Don't tie TargetOptions::LinkerVersion to a module/PCH, it's a driver only thing and doesn't affect any language/preprocessor/etc. semantics. 2014-04-29 18:45:01 +00:00
dllexport-default-arg-closure.cpp [MS] Don't escape MS C++ names with \01 2018-03-16 20:36:49 +00:00
emit-dependencies.c Unbreak windows bot. 2017-03-29 17:58:41 +00:00
emit-pth.c Use raw_pwrite_stream in clang. 2015-04-14 15:15:49 +00:00
empty-def-fwd-struct.h [PCH] Avoid VarDecl emission attempt if no owning module avaiable 2017-03-01 19:18:42 +00:00
empty-with-headers.c
enum.c
enum.h
exprs.c
exprs.h
ext_vector.c
ext_vector.h
external-defs.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
external-defs.h
field-designator.c
floating-literal.c Explicitly permit undefined behavior in constant initializers for global 2015-12-08 03:21:47 +00:00
format-strings.c
friend-template.cpp
functions.c
functions.h
fuzzy-pch.c
fuzzy-pch.h
headermap.h
headermap.m
headersearch.cpp Try to unbreak the Windows buildbots. 2015-03-03 23:36:57 +00:00
implicitly-deleted.cpp PR22405: don't lose implicit-deleted-ness across AST write / read. 2015-02-06 23:20:21 +00:00
include-stream-type.cpp Add tests for llvm-bcanalyzer stream types 2018-04-22 00:04:35 +00:00
include-timestamp.cpp [clang] Get rid of "%T" expansions 2017-08-15 19:47:06 +00:00
irgen-rdar13114142.mm
late-parsed-instantiations.cpp [MS] Fix late-parsed template infinite loop in eager instantiation 2018-03-26 18:22:47 +00:00
line-directive-nofilename.c Correctly handle line table entries without filenames during AST serialization 2017-12-04 22:28:45 +00:00
line-directive-nofilename.h Correctly handle line table entries without filenames during AST serialization 2017-12-04 22:28:45 +00:00
line-directive.c
line-directive.h
local_static.cpp Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
local_static.h
macro-redef.c
macro-undef.cpp [Test] Make Lit tests C++11 compatible - misc 2017-02-17 19:36:19 +00:00
make-integer-seq.cpp [Sema] Implement __make_integer_seq 2015-11-04 03:40:30 +00:00
method-redecls.m
method_pool.h
method_pool.m
missing-file.cpp Exclude PCH/missing-file.cpp on Windows, it does not pass reliably 2016-02-16 19:16:28 +00:00
modified-header-crash.c Avoid assumption that lit tests are writable (in a couple more places). NFC 2018-01-09 09:32:53 +00:00
modified-header-crash.h
modified-header-error.c
modified-module-dependency.m Commit some test changes somehow missed in r239789. 2015-06-16 00:19:29 +00:00
modified-module-dependency.module.map
module-hash-difference.m Commit some test changes somehow missed in r239789. 2015-06-16 00:19:29 +00:00
ms-if-exists.cpp
multiple-include-pch.c
multiple_decls.c
multiple_decls.h
namespaces.cpp
no-validate-pch.cl Do not validate pch when -fno-validate-pch is set 2016-09-07 18:40:20 +00:00
nonvisible-external-defs.c
nonvisible-external-defs.h
objc_boxable.m Add missing files for objc_boxable feature. 2015-07-23 14:45:41 +00:00
objc_boxable_record.h Add missing files for objc_boxable feature. 2015-07-23 14:45:41 +00:00
objc_boxable_record_attr.h Add missing files for objc_boxable feature. 2015-07-23 14:45:41 +00:00
objc_container.h
objc_container.m Cleanup the handling of noinline function attributes, -fno-inline, 2016-12-23 01:24:49 +00:00
objc_exprs.h
objc_exprs.m
objc_import.h
objc_import.m
objc_kindof.m Implement the Objective-C __kindof type qualifier. 2015-07-07 03:58:42 +00:00
objc_literals.m Account for calling convention specifiers in function definitions in IR test cases 2015-06-29 17:29:50 +00:00
objc_literals.mm Account for calling convention specifiers in function definitions in IR test cases 2015-06-29 17:29:50 +00:00
objc_methods.h
objc_methods.m
objc_parameterized_classes.m Implement variance for Objective-C type parameters. 2015-07-07 03:58:54 +00:00
objc_property.h
objc_property.m
objc_stmts.h
objc_stmts.m
objcxx-ivar-class.h
objcxx-ivar-class.mm
ocl_types.cl Fix a lit test issue exposed by r290056 2016-12-18 07:26:01 +00:00
ocl_types.h [OpenCL] Correct ndrange_t implementation 2017-02-16 12:27:47 +00:00
opencl-extensions.cl [OpenCL] Add supported OpenCL extensions to target info. 2016-05-16 17:06:34 +00:00
pch-dir.c Fix crash on invalid if we can't find a suitable PCH file in a specified 2015-09-04 21:44:32 +00:00
pch-dir.h
pch__VA_ARGS__.c
pch__VA_ARGS__.h
pchpch.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
pchpch1.h
pchpch2.h
pending-ids.m Stop messing with the 'g' group of options in CompilerInvocation. 2015-10-08 04:24:12 +00:00
pr4489.c Removing an XFAIL which shouldn't apply. We no longer care about MSVC 9, and this test probably should not have been XFAILed everywhere regardless. The test passes on Windows with MSVC 12. 2014-05-19 17:58:28 +00:00
pr18806.cpp
pr27445.cpp Fix a bug involving deferred decl emission and PCH 2016-04-22 18:46:33 +00:00
pragma-comment.c CodeGen: support linker options on Windows ARM 2016-06-23 13:45:33 +00:00
pragma-cuda-force-host-device.cu [CUDA] Rework tests now that we emit deferred diagnostics during sema. Test-only change. 2016-10-19 00:06:49 +00:00
pragma-detect_mismatch.c CodeGen: support linker options on Windows ARM 2016-06-23 13:45:33 +00:00
pragma-diag-section.cpp
pragma-diag.c
pragma-loop.cpp [OpenMP] Fix trailing space when printing pragmas, by Joel. E. Denny 2018-02-14 17:38:47 +00:00
pragma-ms_struct.cpp Serialize `pragma ms_struct` state. 2016-03-02 23:22:00 +00:00
pragma-once.c Support '#pragma once' in headers when using PCH 2016-07-25 17:17:06 +00:00
pragma-optimize.c [TEST] Improve tests for #pragma clang optimize off/on 2014-07-28 14:33:17 +00:00
pragma-pack.c Recommit r308327 3rd time: Add a warning for missing 2017-07-28 14:41:21 +00:00
pragma-pointers_to_members.cpp Serialize `pragma pointers_to_members` state. 2016-03-03 00:17:35 +00:00
pragma-weak.c Bring r325915 back. 2018-02-23 19:30:48 +00:00
pragma-weak.h
preamble.c
pth.c
pth.h
rdar8852495.c
rdar10830559.cpp
reinclude.cpp
reinclude1.h
reinclude2.h
reloc.c Re-apply "test: Use add_lit_testsuites so that subsets of tests can be specified" 2016-07-05 17:54:40 +00:00
remap-file-from-pch.cpp
remap-file-from-pch.cpp.h
remap-file-from-pch.cpp.remap.h
replaced-decl.m
selector-warning.h
selector-warning.m
single-token-macro.c Do not warn on keyword undef 2014-12-12 06:37:55 +00:00
source-manager-stack.c
stmt-attrs.cpp Prune CRLF. 2014-10-27 12:37:26 +00:00
stmts.c
stmts.h
struct.c
struct.h
subscripting-literals.m Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
suspicious-pragma-pack.c -Wpragma-pack: add an additional note and fixit when warning 2017-07-31 13:37:50 +00:00
target-options.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
target-options.h
tentative-defs.c Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
tentative-defs.h
thread-local.cpp Revert "Revert r241620 and follow-up commits" and move the initialization 2015-07-08 01:00:30 +00:00
thread-safety-attrs.cpp Updating the capability attribute diagnostics to be more capability-neutral. Instead of using terminology such as "lock", "unlock" and "locked", the new terminology is "acquire", "release" and "held". Additionally, the capability attribute's name argument is now reported as part of the diagnostic, instead of hard coding as "mutex." 2014-04-01 21:43:23 +00:00
type_pack_element.cpp [Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne. 2016-07-01 01:24:09 +00:00
types.c
types.h
typo.cpp
typo.m
typo2.cpp
undefined-internal.c
uses-seh.cpp [MS] Don't escape MS C++ names with \01 2018-03-16 20:36:49 +00:00
uuidof.cpp Fix serialization/deserialization for __uuidof 2016-03-28 03:19:50 +00:00
va_arg.c Support __builtin_ms_va_list. 2015-09-17 20:55:33 +00:00
va_arg.cpp Support __builtin_ms_va_list. 2015-09-17 20:55:33 +00:00
va_arg.h Support __builtin_ms_va_list. 2015-09-17 20:55:33 +00:00
variables.c
variables.h
verify_pch.m Avoid assumption that lit tests are writable. NFC 2018-01-08 15:05:01 +00:00
working-directory.cpp
working-directory.h