Manual-sync mirror of chromium.googlesource.com/external/github.com/llvm/llvm-project (bare monorepo, no subtree suffix)
Find a file
Jameson Nash 4b1cd29ffb
Thread Safety Analysis: Don't treat function pointer parameters as scoped capabilities (#211885)
Capability attributes on a parameter mean one of two unrelated things:
on a scoped-lockable parameter they describe the locks the passed scope
object holds, while on a function pointer parameter they describe the
requirements of the function called through the pointer. Since #191187
allowed the latter, both of the scoped-lockable code paths have been
misreading function pointer parameters as scope objects.

At a call site, the argument bound to the parameter was translated into
a capability and required to be held, so passing a callback that
requires a capability was reported as a missing lock named after the
callback:

```
void apply(fn_t fn EXCLUSIVE_LOCKS_REQUIRED(mu));
  static int my_fn() EXCLUSIVE_LOCKS_REQUIRED(mu);
  ...
  apply(my_fn); // warning: requires holding mutex 'fn'
```

In the callee, the same confusion seeded the parameter's capabilities
into the function's entry lockset, so they were considered held
throughout the body and the calls made through the pointer went
unchecked -- the opposite of what the annotation asks for.

Skip function pointer parameters in both places; their attributes are
already checked at the indirect call sites (by #191187), the same way as
for annotated function pointer variables and fields.

Assisted-by: Claude Opus 5
2026-07-28 11:53:13 -04:00
.ci [libc++] Rename pre-commit CI workflows (#211844) 2026-07-24 14:56:19 -04:00
.github [premerge] Build and check runtimes on macOS premerge (#210852) 2026-07-28 08:40:09 -07:00
bolt [RFC][BOLT] Enable lite mode by default on AArch64 (#205545) 2026-07-28 15:52:44 +01:00
clang Thread Safety Analysis: Don't treat function pointer parameters as scoped capabilities (#211885) 2026-07-28 11:53:13 -04:00
clang-tools-extra Add Objective-C support to include-cleaner's AST walker. (#211119) 2026-07-27 12:14:27 -04:00
cmake Bump version to 24.0.0git (#209473) 2026-07-14 09:21:03 -04:00
compiler-rt [Driver][SYCL] Add compile-time device library linking for SPIR-V targets (#196656) 2026-07-28 14:31:09 +00:00
cross-project-tests cross-project-tests: Migrate amdgpu tests to use subarch triples (#210115) 2026-07-24 17:38:34 +02:00
flang [flang] Stop running array-value-copy in the default pipeline (#211816) 2026-07-28 10:59:35 -04:00
flang-rt [flang-rt][cuda] Keep CUFDeviceIsActive working under runtime/driver skew (#212320) 2026-07-27 16:02:30 -07:00
libc [libc] Fix EOF handling in fscanf (#211982) 2026-07-28 08:27:07 -07:00
libclc libclc: Fix signed 0 handling in sincospi (#211260) 2026-07-23 06:24:44 +02:00
libcxx [libc++][math] Add constexpr to comparison functions (#210075) 2026-07-28 18:14:47 +03:00
libcxxabi [libc++abi][NFC] Remove some XFAILs which never trigger (#211241) 2026-07-26 16:19:32 +02:00
libsycl [SYCL] Update SYCL to use the new liboffload allocation API (#212223) 2026-07-27 14:14:41 +02:00
libunwind [libunwind][PPC64] Fix unw_getcontext corrupting callee-saved VSX registers on LE (#198371) 2026-07-25 12:11:31 -07:00
lld [lld][WebAssembly] Fix SharedTagKind in toString (#212385) 2026-07-27 23:37:52 -07:00
lldb [lldb] Fix trace test assertions after error-message style change (#212372) 2026-07-28 09:51:06 -06:00
llvm [IRCE] Discard speculative SCEV expansions when bailing out (#211089) 2026-07-28 11:43:30 -04:00
llvm-libgcc [docs] Finish misc MyST migration (#210209) 2026-07-17 11:56:59 -07:00
mlir [mlir][SPIR-V] Add SPIRVToLLVM conversion for VectorTimesScalar (#206949) 2026-07-28 17:23:39 +02:00
offload [offload][lit] Run check-offload-unit as part of check-all (#212513) 2026-07-28 14:53:22 +00:00
openmp FIX some OMPT tests that fail on RISC-V (#156914) 2026-07-24 11:24:36 +02:00
orc-rt [orc-rt] Reorder wrapper-fn args to trailing-callback style. (#212243) 2026-07-28 17:14:30 +10:00
polly [SCEV] Remove ptrtoint expression (NFC). (#212038) 2026-07-26 21:28:16 +01:00
runtimes Remove debug leftovers (#211068) 2026-07-21 23:23:13 -07:00
third-party Fix a warning and an uninitialized variable in benchmark (#200927) 2026-06-02 13:49:06 -07:00
utils [Bazel] Fixes 98fb5da (#212522) 2026-07-28 15:42:51 +00:00
.clang-format
.clang-format-ignore [Docs] Update coding standard for TD files (#200848) 2026-06-01 21:35:58 +01:00
.clang-tidy Add default empty header filter regex to root .clang-tidy (#167386) 2025-11-11 01:36:25 +03:00
.git-blame-ignore-revs Add "Split clang/lib/CodeGen/CGBuiltin.cpp" to .git-blame-ignore-revs (#203419) 2026-06-12 12:03:28 +01:00
.gitattributes [libclang/python] Enable packaging clang python bindings (#125806) 2025-11-24 17:21:24 -08:00
.gitignore gitignore: Add emacs lock files (#205055) 2026-06-22 18:19:29 +02:00
.mailmap mailmap: Add entries for Peter Collingbourne. (#210526) 2026-07-18 11:02:06 -07:00
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE.TXT
pyproject.toml [docs] Create utils/docs (#203962) 2026-06-24 15:12:48 -04:00
README.md [libc++] Rename pre-commit CI workflows (#211844) 2026-07-24 14:56:19 -04:00
SECURITY.md [SECURITY.md] add pointers to "what is a security issue" (#177372) 2026-01-22 17:19:09 -07:00

The LLVM Compiler Infrastructure

OpenSSF Scorecard OpenSSF Best Practices libc++

Welcome to the LLVM project!

This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.

The LLVM project has multiple components. The core of the project is itself called "LLVM". This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.

C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.

Other components include: the libc++ C++ standard library, the LLD linker, and more.

Getting the Source Code and Building LLVM

Consult the Getting Started with LLVM page for information on building and running LLVM.

For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.

Getting in touch

Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.

The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.