1. YAML parser robustness improvements (details)
  2. [clang-tidy] Add readability-make-member-function-const (details)
  3. gn build: Merge 24130d661ed (details)
  4. [clang-format] [PR35518] C++17 deduction guides are wrongly formatted (details)
  5. clang-format: Add a fallback style to Emacs mode (details)
  6. [clangd] Implement a function to lex the file to find candidate (details)
  7. [ARM MVE] Remove accidental 64-bit vst2/vld2 intrinsics. (details)
  8. [clang,MveEmitter] Fix sign/zero extension in range limits. (details)
  9. [ARM,MVE] Integer-type nitpicks in MVE intrinsics. (details)
  10. [ARM,MVE] Add intrinsics for gather/scatter load/stores. (details)
Commit 092452d402d793c731c3861ba920a85c5c4e1fff by hintonda
YAML parser robustness improvements
Summary: This patch fixes a number of bugs found in the YAML parser
through fuzzing. In general, this makes the parser more robust against
malformed inputs.
The fixes are mostly improved null checking and returning errors in more
cases. In some cases, asserts were changed to regular errors, this
provides the same robustness but also protects release builds from the
triggering conditions. This also improves the fuzzability of the YAML
parser since asserts can act as a roadblock to further fuzzing once
they're hit.
Each fix has a corresponding test case:
- TestAnchorMapError - Added proper null pointer handling in
   `Stream::printError` if N is null and `KeyValueNode::getValue` if
   getKey returns null, `Input::createHNodes` `dyn_casts` changed to
   `dyn_cast_or_null` so the null pointer checks are actually able to
- TestFlowSequenceTokenErrors - Added case in
   `Document::parseBlockNode` for FlowMappingEnd, FlowSequenceEnd, or
   FlowEntry tokens outside of mappings or sequences
- TestDirectiveMappingNoValue - Changed assert to regular error
   return in `Scanner::scanValue`
- TestUnescapeInfiniteLoop - Fixed infinite loop in
   `ScalarNode::unescapeDoubleQuoted` by returning an error for
   unrecognized escape codes
- TestScannerUnexpectedCharacter - Changed asserts to regular error
   returns in `Scanner::consume`
- TestUnknownDirective - For both of the inputs the stream doesn't
   fail and correctly returns TK_Error, but there is no valid root
   node for the document. There's no reasonable way to make the
   scanner fail for unknown directives without breaking the YAML spec
   (see spec-07-01.test). I think the assert is unnecessary given
   that an error is still generated for this case.
The `SimpleKeys.clear()` line fixes a bug found by AddressSanitizer
triggered by multiple test cases - when TokenQueue is cleared SimpleKeys
is still holding dangling pointers into it, so SimpleKeys should be
cleared as well.
Patch by Thomas Finch!
Reviewers: chandlerc, Bigcheese, hintonda
Reviewed By: Bigcheese, hintonda
Subscribers: hintonda, kristina, beanz, dexonsmith, hiraditya,
Tags: #llvm
Differential Revision:
The file was modifiedllvm/unittests/Support/YAMLIOTest.cpp
The file was modifiedllvm/lib/Support/YAMLParser.cpp
The file was modifiedllvm/lib/Support/YAMLTraits.cpp
Commit 24130d661ed42c30f009b695d3c9ce57d2208b5e by gehre.matthias
[clang-tidy] Add readability-make-member-function-const
Summary: Finds non-static member functions that can be made ``const``
because the functions don't use ``this`` in a non-const way.
The check conservatively tries to preserve logical costness in favor of
physical costness. See readability-make-member-function-const.rst for
more details.
Reviewers: aaron.ballman, gribozavr, hokein, alexfh
Subscribers: mgorny, xazax.hun, cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang-tools-extra/clang-tidy/readability/CMakeLists.txt
The file was addedclang-tools-extra/clang-tidy/readability/MakeMemberFunctionConstCheck.h
The file was addedclang-tools-extra/docs/clang-tidy/checks/readability-make-member-function-const.rst
The file was modifiedclang-tools-extra/docs/clang-tidy/checks/list.rst
The file was addedclang-tools-extra/clang-tidy/readability/MakeMemberFunctionConstCheck.cpp
The file was modifiedclang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp
The file was modifiedclang-tools-extra/docs/ReleaseNotes.rst
The file was addedclang-tools-extra/test/clang-tidy/readability-make-member-function-const.cpp
Commit 1a6903bdfeca5facfc0c595e7cf9a14f0e87fb0e by llvmgnsyncbot
gn build: Merge 24130d661ed
The file was modifiedllvm/utils/gn/secondary/clang-tools-extra/clang-tidy/readability/
Commit 76ec6b1ef69fcbd27cb0d587a5eb2d51a135a6bb by paulhoad
[clang-format] [PR35518] C++17 deduction guides are wrongly formatted
Summary: see
clang-format removes spaces around deduction guides but not trailing
return types, make the consistent
``` template <typename T> S(T)->S<T>; auto f(int, int) -> double;
``` template <typename T> S(T) -> S<T>; auto f(int, int) -> double;
Reviewers: klimek, mitchell-stellar, owenpan, sammccall, lichray,
curdeius, KyrBoh
Reviewed By: curdeius
Subscribers: merge_guards_bot, hans, lichray, cfe-commits
Tags: #clang-format, #clang-tools-extra, #clang
Differential Revision:
The file was modifiedclang/unittests/Format/FormatTest.cpp
The file was modifiedclang/lib/Format/TokenAnnotator.cpp
Commit f349cc37cc485fd5fc7b34cb84053af459337ecc by paulhoad
clang-format: Add a fallback style to Emacs mode
Summary: This allows one to enable `clang-format-buffer` on file save
and avoid reformatting files that are outside of any project with
.clang-format style.
Reviewers: djasper, klimek, sammccall, owenpan, mitchell-stellar,
Reviewed By: MyDeveloperDay
Subscribers: cfe-commits
Patch By: dottedmag
Tags: #clang, #clang-format
Differential Revision:
The file was modifiedclang/tools/clang-format/clang-format.el
Commit 7ea4c6fa5121b2417875dc1b547162e18be7dbe2 by hokein.wu
[clangd] Implement a function to lex the file to find candidate
Summary: This will be used for incoming cross-file rename (to detect
index staleness issue).
Reviewers: ilya-biryukov
Subscribers: MaskRay, jkorous, arphaman, kadircet, usaxena95,
Tags: #clang
Differential Revision:
The file was modifiedclang-tools-extra/clangd/SourceCode.h
The file was modifiedclang-tools-extra/clangd/unittests/SourceCodeTests.cpp
The file was modifiedclang-tools-extra/clangd/SourceCode.cpp
Commit 38f016520f6edbfa7d059b60ac54e80dd955ada5 by simon.tatham
[ARM MVE] Remove accidental 64-bit vst2/vld2 intrinsics.
ACLE defines no such intrinsic as vst2q_u64, and the MVE instruction set
has no corresponding instruction. But I had accidentally added them to
the fledgling <arm_mve.h> anyway, and if you used them, you'd get a
compiler crash.
Reviewers: dmgreen
Subscribers: kristof.beyls, cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/include/clang/Basic/
Commit 26bc7cb05edd6bea4b9a1593baf0fbe9e45f54e4 by simon.tatham
[clang,MveEmitter] Fix sign/zero extension in range limits.
In the code that generates Sema range checks on constant arguments, I
had a piece of code that checks the bounds specified in the Tablegen
intrinsic description against the range of the integer type being
tested. If the bounds are large enough to permit any value of the
integer type, you can omit the compile-time range check. (This case is
expected to come up in some of the bitwise operation intrinsics.)
But somehow I got my signed/unsigned check backwards (asking for the
signed min/max of an unsigned type and vice versa), and also made a sign
extension error in which a signed negative value gets zero-extended. Now
rewritten more sensibly, and it should get its first sensible test from
the next batch of intrinsics I'm planning to add in D69791.
Reviewers: dmgreen
Subscribers: cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
Commit f0c6890f32c0d5ee7f3973181eb83fcb0a50dc1a by simon.tatham
[ARM,MVE] Integer-type nitpicks in MVE intrinsics.
A few integer types in the ACLE definitions of MVE intrinsics are given
as 'int' or 'unsigned' instead of <stdint.h> fixed-size types like
uint32_t. Usually these are the ones where the size isn't that
important, such as immediate offsets in loads (which have a range
limited by the instruction encoding) or the carry flag in vadcq which
can only be 0 or 1 anyway.
With this change, <arm_mve.h> follows that exact type naming, so that
the function prototypes look identical to the ones in ACLE, instead of
replacing int and unsigned with int32_t and uint32_t.
Reviewers: dmgreen
Subscribers: kristof.beyls, cfe-commits
Tags: #clang
Differential Revision:
The file was modifiedclang/include/clang/Basic/
The file was modifiedclang/include/clang/Basic/
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
Commit 6c3fee47a6492b472be2d48cee0a85773f160df0 by simon.tatham
[ARM,MVE] Add intrinsics for gather/scatter load/stores.
This patch adds two new families of intrinsics, both of which are memory
accesses taking a vector of locations to load from / store to.
The vldrq_gather_base / vstrq_scatter_base intrinsics take a vector of
base addresses, and an immediate offset to be added consistently to each
one. vldrq_gather_offset / vstrq_scatter_offset take a scalar base
address, and a vector of offsets to add to it. The
'shifted_offset' variants also multiply each offset by the element size
type, so that the vector is effectively of array indices.
At the IR level, these operations are represented by a single set of
four IR intrinsics: {gather,scatter} × {base,offset}. The other details
(signed/unsigned, shift, and memory element size as opposed to vector
element size) are all specified by IR intrinsic polymorphism and
immediate operands, because that made the selection job easier than
making a huge family of similarly named intrinsics.
I considered using the standard IR representations such as
llvm.masked.gather, but they're not a good fit. In order to use
llvm.masked.gather to represent a gather_offset load with element size
smaller than a pointer, you'd have to expand the <8 x i16> vector of
offsets into an <8 x i16*> vector of pointers, which would be split up
during legalization, so you'd spend most of your time undoing the mess
it had made. Also, ISel support for llvm.masked.gather would be easy
enough in a trivial way (you can expand it into a gather-base load with
a zero immediate offset), but instruction-selecting lots of fiddly
idioms back into all the _other_ MVE load instructions would be much
more work. So I think dedicated IR intrinsics are the more sensible
approach, at least for the moment.
On the clang tablegen side, I've added two new features to the Tablegen
source accepted by MveEmitter: a 'CopyKind' type node for defining a
type that varies with the parameter type (it lets you ask for an
unsigned integer type of the same width as the parameter), and an
'unsignedflag' value node for passing an immediate IR operand which is 0
for a signed integer type or 1 for an unsigned one. That lets me write
each kind of intrinsic just once and get all its subtypes and immediate
arguments generated automatically.
Also I've tweaked the handling of pointer-typed values in the code
generation part of MveEmitter: they're generated as Address rather than
Value (i.e. including an alignment) so that they can be given to the
ordinary IR load and store operations, but I'd omitted the code to
convert them back to Value when they're going to be used as an argument
to an IR intrinsic.
On the MC side, I've enhanced MVEVectorVTInfo so that it can tell you
not only the full assembly-language suffix for a given vector type
(like 's32' or 'u16') but also the numeric-only one used by store
instructions (just '32' or '16').
Reviewers: dmgreen
Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision:
The file was addedclang/test/CodeGen/arm-mve-intrinsics/scatter-gather.c
The file was modifiedclang/utils/TableGen/MveEmitter.cpp
The file was modifiedclang/include/clang/Basic/
The file was addedclang/test/Sema/arm-mve-immediates.c
The file was modifiedclang/include/clang/Basic/
The file was modifiedllvm/include/llvm/IR/
The file was modifiedllvm/lib/Target/ARM/
The file was addedllvm/test/CodeGen/Thumb2/mve-intrinsics/scatter-gather.ll