[clang-repl] Honor `-emit-llvm` to print incremental IR (#217870)
clang-repl cannot currently emit the LLVM IR it generates. The
command-line emit actions are accepted but folded into
`EmitLLVMOnlyAction` (producing no output), and `frontend::EmitLLVM` is
rejected by the incremental frontend action when `-emit-llvm` is passed.
This prevents users from inspecting IR produced per-input PTU.
This patch teaches clang-repl to honor `-emit-llvm` by allowing the
IncrementalAction to accept `frontend::EmitLLVM` , making the driver
print each input's `llvm::Modul` to stdout instead of executing it,
similar to `clang -emit-llvm`. This enables a lit-level test to
FileCheck the IR produced by clang-repl and the effect of a statement on
it. Exposing this functionality beyond the driver level to allow library
consumers of `clang::Interpreter` to use it is a planned follow-up.
[libc++] Disable the wmemchr optimization in std::find on Apple platforms (#217655)
`wmemchr` on Apple platforms is incredibly slow. We can do significantly
better by just implementing it on our own.
Fixes #205840
[DAG] Remove trivial VP SDNodes. NFC
This removes the codegen parts of the trivial VP intrinsics. It's quite far reaching, but the general categories of code removed are:
- Removing definitions from VPIntrinsics.def
- Legalization and expansion code
- MatchContext used to match over both VP and non-VP nodes
- Some dead DAGCombines and folds in SelectionDAGBuilder
There are still more things to be cleaned up after this, e.g. removing more of the VPIntrinsic class hierarchy, removing ExpandVectorPredication/moving expansion into other places, removing MatchContext from SDPatternMatch
[LoopSafety] Cache whether block is guaranteed to execute (NFC) (#217943)
To avoid doing the CFG walk multiple times if instructions from the same
block are queried.
This is for an upcoming change that does more isGuaranteedToExecute()
queries.
[DAG] Remove trivial VP SDNodes. NFC
This removes the codegen parts of the trivial VP intrinsics. It's quite far reaching, but the general categories of code removed are:
- Removing definitions from VPIntrinsics.def
- Legalization and expansion code
- MatchContext used to match over both VP and non-VP nodes
- Some dead DAGCombines and folds in SelectionDAGBuilder
There are still more things to be cleaned up after this, e.g. removing more of the VPIntrinsic class hierarchy, removing ExpandVectorPredication/moving expansion into other places, removing MatchContext from SDPatternMatch
[lldb] Clamp out-of-range shift amounts in Scalar (#217027)
`Scalar::operator>>=` and `Scalar::ExtractBitfield` pass their shift
amount straight to `APSInt::operator>>=(unsigned)`, which asserts when
the
amount exceeds the operand's bit width:
```
Assertion failed: (ShiftAmt <= BitWidth && "Invalid shift amount"),
function ashrInPlace, file APInt.h, line 842.
#7 llvm::APInt::ashrInPlace(unsigned int)
#8 lldb_private::Scalar::ExtractBitfield(unsigned int, unsigned int)
#9 lldb_private::DWARFExpression::Evaluate(...)
#11 LLVMFuzzerTestOneInput
```
The DWARF expression evaluator reaches both from untrusted operands
(`DW_OP_shra` shift counts and `DW_OP_bit_piece` bit offsets), so
`lldb-dwarf-expression-fuzzer` aborts the process on a shift wider than
[16 lines not shown]
[clang-tidy] Fix crash on pointer arithmetic with an incomplete type in bugprone-pointer-arithmetic-on-polymorphic-object (#215724)
This commit fixes a crash in clangd / clang-tidy: running
the `bugprone-pointer-arithmetic-on-polymorphic-object` check on code
that does pointer arithmetic on a pointer to an **incomplete type** (a
type that is forward-declared but never defined) makes the matcher hit
an assertion and abort.
AI note: Used AI tools for code analysis and wording polish.
[RISCV] Rename riscv-pre-ra-expand-pseudo (#218106)
From riscv-prera-expand-psuedo. Makes the name more consistent with
other targets (e.g., AMDGPU uses pre-ra) and with our hyphenation in
general.
nuageinit: root should be allowed to log in when disable_root is false
PermitRootLogin is "no" by default and that stopped root from logging in
even though disable_root was set to false during initialization.
Reviewed by: bapt
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D59101