llvm-project/clang/lib/AST
Hubert Tong 147b743602 [ExprConstant] Improve memchr/memcmp for type mismatch and multibyte element types
Summary:
`memchr` and `memcmp` operate upon the character units of the object
representation; that is, the `size_t` parameter expresses the number of
character units. The constant folding implementation is updated in this
patch to account for multibyte element types in the arrays passed to
`memchr`/`memcmp` and, in the case of `memcmp`, to account for the
possibility that the arrays may have differing element types (even when
they are byte-sized).

Actual inspection of the object representation is not implemented.
Comparisons are done only between elements with the same object size;
that is, `memchr` will fail when inspecting at least one character unit
of a multibyte element. The integer types are assumed to have two's
complement representation with 0 for `false`, 1 for `true`, and no
padding bits.

`memcmp` on multibyte elements will only be able to fold in cases where
enough elements are equal for the answer to be 0.

Various tests are added to guard against incorrect folding for cases
that miscompile on some system or other prior to this patch. At the same
time, the unsigned 32-bit `wchar_t` testing in
`test/SemaCXX/constexpr-string.cpp` is restored.

Reviewers: rsmith, aaron.ballman, hfinkel

Reviewed By: rsmith

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D55510

llvm-svn: 348938
2018-12-12 16:53:43 +00:00
..
APValue.cpp Fix crash on call to __builtin_memcpy with a null pointer to an 2018-09-13 22:47:33 +00:00
ASTConsumer.cpp
ASTContext.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
ASTDiagnostic.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
ASTDumper.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
ASTImporter.cpp [ASTImporter] Remove import of definition from GetAlreadyImportedOrNull 2018-12-12 11:22:55 +00:00
ASTStructuralEquivalence.cpp Misc typos fixes in ./lib folder 2018-12-10 12:37:46 +00:00
ASTTypeTraits.cpp Teach clang-query to dump types. I couldn't find any existing tests for clang-query's dumping functionality. =( 2016-11-02 23:57:18 +00:00
AttrImpl.cpp [NFC] Header cleanup 2016-07-18 19:02:11 +00:00
CMakeLists.txt NFC: Extract TextNodeDumper class 2018-12-05 21:12:39 +00:00
CXXABI.h Fix __has_unique_object_representations implementation 2017-11-30 16:37:02 +00:00
CXXInheritance.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
Comment.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
CommentBriefParser.cpp Remove \brief commands from doxygen comments. 2018-05-09 01:00:01 +00:00
CommentCommandTraits.cpp
CommentLexer.cpp Add a newline to SourceLocation dump output 2018-08-15 20:32:06 +00:00
CommentParser.cpp Remove spurious assertion in -Wdocumentation 2018-10-02 22:23:27 +00:00
CommentSema.cpp Port getLocEnd -> getEndLoc 2018-08-09 21:09:38 +00:00
ComparisonCategories.cpp [C++2a] Implement operator<=>: Address bugs and post-commit review comments after r331677. 2018-05-08 00:52:19 +00:00
DataCollection.cpp [analyzer] Make StmtDataCollector customizable 2017-08-23 16:28:26 +00:00
Decl.cpp [AST] Fix an uninitialized bug in the bits of FunctionDecl 2018-12-03 13:04:10 +00:00
DeclBase.cpp [AST] [analyzer] NFC: Reuse code in stable ID dumping methods. 2018-12-03 22:19:05 +00:00
DeclCXX.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
DeclFriend.cpp [AST] Fix some Clang-tidy modernize-use-auto warnings; other minor fixes (NFC). 2018-04-03 00:11:50 +00:00
DeclGroup.cpp [AST] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-10 00:59:22 +00:00
DeclObjC.cpp [Sema][ObjC] Infer availability of +new from availability of -init. 2018-09-10 22:20:09 +00:00
DeclOpenMP.cpp [OPENMP] Add support for OMP5 requires directive + unified_address clause 2018-09-26 04:28:39 +00:00
DeclPrinter.cpp Add support for 'atomic_default_mem_order' clause on 'requires' directive. Also renamed test files relating to 'requires'. Differntial review: https://reviews.llvm.org/D53513 2018-11-02 12:18:11 +00:00
DeclTemplate.cpp [Sema] Remove some conditions of a failing assert 2018-12-05 00:43:11 +00:00
DeclarationName.cpp [AST] Various optimizations + refactoring in DeclarationName(Table) 2018-09-21 12:53:22 +00:00
Expr.cpp [AST][Sema] Remove CallExpr::setNumArgs 2018-12-03 14:54:03 +00:00
ExprCXX.cpp [AST][NFC] Make ArrayTypeTraitExpr non polymorphic 2018-12-04 16:01:24 +00:00
ExprClassification.cpp Create ConstantExpr class 2018-10-31 03:48:47 +00:00
ExprConstant.cpp [ExprConstant] Improve memchr/memcmp for type mismatch and multibyte element types 2018-12-12 16:53:43 +00:00
ExprObjC.cpp [AST] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-30 22:33:48 +00:00
ExternalASTMerger.cpp Set MustBuildLookupTable on PrimaryContext in ExternalASTMerger 2018-11-29 13:50:30 +00:00
ExternalASTSource.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
FormatString.cpp OpenCL: Improve vector printf warnings 2018-12-01 22:16:27 +00:00
FormatStringParsing.h OpenCL: Improve vector printf warnings 2018-12-01 22:16:27 +00:00
InheritViz.cpp
ItaniumCXXABI.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
ItaniumMangle.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
Linkage.h [AST] Squeeze some bits in LinkageComputer::QueryType 2018-09-25 13:43:25 +00:00
Mangle.cpp NFC: Remove MANGLE_CHECKER from ItaniumMangle.cpp 2018-10-23 19:55:38 +00:00
MicrosoftCXXABI.cpp Remove \brief commands from doxygen comments. 2018-05-09 01:00:01 +00:00
MicrosoftMangle.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
NSAPI.cpp [OpenCL] Add support of cl_intel_device_side_avc_motion_estimation extension 2018-11-08 11:25:41 +00:00
NestedNameSpecifier.cpp [WIP][Sema] Improve static_assert diagnostics for type traits. 2018-12-04 07:59:57 +00:00
ODRHash.cpp Misc typos fixes in ./lib folder 2018-12-10 12:37:46 +00:00
OSLog.cpp os_log: Allow specifying mask type in format string. 2018-11-06 07:05:14 +00:00
OpenMPClause.cpp Add support for 'atomic_default_mem_order' clause on 'requires' directive. Also renamed test files relating to 'requires'. Differntial review: https://reviews.llvm.org/D53513 2018-11-02 12:18:11 +00:00
ParentMap.cpp Create ConstantExpr class 2018-10-31 03:48:47 +00:00
PrintfFormatString.cpp OpenCL: Improve vector printf warnings 2018-12-01 22:16:27 +00:00
QualTypeNames.cpp Remove \brief commands from doxygen comments. 2018-05-09 01:00:01 +00:00
RawCommentList.cpp Misc typos fixes in ./lib folder 2018-12-10 12:37:46 +00:00
RecordLayout.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
RecordLayoutBuilder.cpp [AST] Do not align virtual bases in `MicrosoftRecordLayoutBuilder` when 2018-10-23 08:23:22 +00:00
ScanfFormatString.cpp Reapply Logging: make os_log buffer size an integer constant expression. 2018-11-02 13:14:11 +00:00
SelectorLocationsKind.cpp Port getLocStart -> getBeginLoc 2018-08-09 21:08:08 +00:00
Stmt.cpp [AST] Assert that no statement/expression class is polymorphic 2018-12-04 16:04:19 +00:00
StmtCXX.cpp [cxx2a] P0614R1: Support init-statements in range-based for loops. 2018-09-28 18:44:09 +00:00
StmtIterator.cpp [AST] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-21 23:26:08 +00:00
StmtObjC.cpp Port getLocEnd -> getEndLoc 2018-08-09 21:09:38 +00:00
StmtOpenMP.cpp [OpenMP][NVPTX] Use single loops when generating code for distribute parallel for 2018-10-29 15:45:47 +00:00
StmtPrinter.cpp Create ConstantExpr class 2018-10-31 03:48:47 +00:00
StmtProfile.cpp Add support for 'atomic_default_mem_order' clause on 'requires' directive. Also renamed test files relating to 'requires'. Differntial review: https://reviews.llvm.org/D53513 2018-11-02 12:18:11 +00:00
StmtViz.cpp
TemplateBase.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
TemplateName.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
TextNodeDumper.cpp NFC: Move dump of individual comment nodes to NodeDumper 2018-12-09 13:30:17 +00:00
Type.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
TypeLoc.cpp [OpenCL] Add support of cl_intel_device_side_avc_motion_estimation extension 2018-11-08 11:25:41 +00:00
TypePrinter.cpp Revert "[OpenCL] Add generic AS to 'this' pointer" 2018-12-12 15:06:16 +00:00
VTTBuilder.cpp Remove trailing space 2018-07-30 19:24:48 +00:00
VTableBuilder.cpp Use llvm::{all,any,none}_of instead std::{all,any,none}_of. NFC 2018-10-20 17:53:42 +00:00