clang
Skill290 starsChanged 7 months agoMITView on GitHub
Clang/LLVM compiler skill for C/C++ projects. Use when working with clang or clang++ for diagnostics, sanitizer instrumentation, optimization remarks, static analysis with clang-tidy, LTO via lld, or when migrating from GCC to Clang. Activates on queries about clang flags, clang-tidy, clang-format, better error messages, Apple/FreeBSD toolchains, or LLVM-specific optimizations. Covers flag selection, diagnostic tuning, and integration with LLVM tooling.
In this repository142 other files it gives its agents.
- AGENTS.mdAGENTS.md
- custom-allocatorsSkill
- numa-programmingSkill
- af-xdpSkill
- dpdkSkill
- io-uringSkill
- adc-dac-baremetalSkill
- baremetal-startupSkill
- bootloaders-embeddedSkill
- datasheet-and-refmanual-readingSkill
- dma-baremetalSkill
- gpio-baremetalSkill
- interrupts-and-exceptions-baremetalSkill
- low-power-embeddedSkill
- mmio-and-bit-manipulationSkill
- peripherals-from-datasheetSkill
- spi-i2c-baremetalSkill
- stm32-baremetalSkill
- timers-pwm-baremetalSkill
- uart-serial-baremetalSkill
- binutilsSkill
- dynamic-linkingSkill
- elf-inspectionSkill
- linkers-ltoSkill
- bazelSkill
- build-accelerationSkill
- cmakeSkill
- conan-vcpkgSkill
- include-what-you-useSkill
- makeSkill
- mesonSkill
- ninjaSkill
- static-analysisSkill
- code-generation-and-backendsSkill
- compiler-frontendSkill
- compiler-optimizations-deepSkill
- jit-compilationSkill
- llvm-ir-and-passesSkill
- llvm-passesSkill
- mlirSkill
- cpp-modulesSkill
- cpp-templatesSkill
- cross-gccSkill
- gccSkill
- llvmSkill
- msvc-clSkill
- pgoSkill
- abi-and-calling-conventionsSkill
- branch-prediction-and-speculationSkill
- cpu-pipelines-and-hazardsSkill
- memory-hierarchy-and-cachesSkill
- virtual-memory-paging-and-tlbSkill
- concurrency-debuggingSkill
- core-dumpsSkill
- debug-optimized-buildsSkill
- dwarf-debug-formatSkill
- gdbSkill
- lldbSkill
- embedded-rustSkill
- freertosSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 149
Use -mmacosx-version-min=X.Y to set deployment target
- Very specific: line 158
Use skills/compilers/gcc for GCC-equivalent flag mapping
- Very specific: line 159
Use skills/runtimes/sanitizers for -fsanitize=* workflows
- Very specific: line 160
Use skills/compilers/llvm for IR-level work (opt, llc, llvm-dis)
- Very specific: line 161
Use skills/compilers/msvc-cl for clang-cl on Windows
- Very specific: line 162
Use skills/binaries/linkers-lto for linker-level LTO details
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Clang
Purpose
Guide agents through Clang-specific features: superior diagnostics, sanitizer integration, optimization remarks, static analysis, and LLVM tooling. Covers divergences from GCC and Apple/FreeBSD specifics.
Triggers
- "I want better compiler diagnostics/errors"
- "How do I use clang-tidy / clang-format?"
- "How do I see what the compiler optimised or didn't?"
- "I'm on macOS / FreeBSD using clang"
- "clang-cl for MSVC-compatible builds" — see
skills/compilers/msvc-cl - Sanitizer queries — see
skills/runtimes/sanitizers
Workflow
1. Build mode flags (identical to GCC)
Clang accepts most GCC flags. Key differences:
| Feature | GCC | Clang |
| Min size | -Os | -Os or -Oz (more aggressive) |
| Optimise only hot | — | -fprofile-instr-use (LLVM PGO) |
| Thin LTO | -flto | -flto=thin (faster) |
| Static analyser | -fanalyzer | clang --analyze or clang-tidy |
2. Clang-specific diagnostic flags
# Show fix-it hints inline
clang -Wall -Wextra --show-fixits src.c
# Limit error count
clang -ferror-limit=5 src.c
# Verbose template errors (disable elision)
clang -fno-elide-type src.cpp
# Show tree diff for template mismatch
clang -fdiagnostics-show-template-tree src.cppClang's diagnostics include exact range highlighting and fix-it suggestions that GCC lacks.
3. Optimization remarks
Optimization remarks let you see what Clang did or refused to do:
# Inliner decisions
clang -O2 -Rpass=inline src.c
# Missed vectorisation
clang -O2 -Rpass-missed=loop-vectorize src.c
# Why a loop was not vectorized
clang -O2 -Rpass-analysis=loop-vectorize src.c
# Save all remarks to YAML for post-processing
clang -O2 -fsave-optimization-record src.c
# Produces src.opt.yamlInterpret remarks:
remark: foo inlined into bar— inlining happened; good for hot pathsremark: loop not vectorized: loop control flow is not understood— restructure the loopremark: not vectorized: cannot prove it is safe to reorder...— add__restrict__or#pragma clang loop vectorize(assume_safety)
4. Static analysis
# Built-in analyser (CSA)
clang --analyze -Xanalyzer -analyzer-output=text src.c
# clang-tidy (separate tool, richer checks)
clang-tidy src.c -- -std=c++17 -I/usr/include
# Enable specific check families
clang-tidy -checks='clang-analyzer-*,modernize-*,bugprone-*' src.cpp --
# Apply fixits automatically
clang-tidy -fix src.cpp --Common clang-tidy check families:
bugprone-*: real bugs (use-after-move, dangling, etc.)clang-analyzer-*: CSA checks (memory, null deref)modernize-*: C++11/14/17 modernisationperformance-*: unnecessary copies, move candidatesreadability-*: naming, complexity
5. LTO with lld
# Full LTO
clang -O2 -flto -fuse-ld=lld src.c -o prog
# Thin LTO (faster link, nearly same quality)
clang -O2 -flto=thin -fuse-ld=lld src.c -o prog
# Check lld is available
clang -fuse-ld=lld -Wl,--version 2>&1 | head -1For large projects, ThinLTO is preferred: link times 5-10x faster than full LTO with comparable code quality.
6. PGO (LLVM instrumentation)
# Step 1: instrument
clang -O2 -fprofile-instr-generate prog.c -o prog_inst
# Step 2: run with representative input
./prog_inst < workload.input
# Generates default.profraw
# Step 3: merge profiles
llvm-profdata merge -output=prog.profdata default.profraw
# Step 4: use profile
clang -O2 -fprofile-instr-use=prog.profdata prog.c -o progAutoFDO (sampling-based, less intrusive): collect with perf, convert with create_llvm_prof, use with -fprofile-sample-use. See skills/profilers/linux-perf.
7. GCC compatibility
Clang is intentionally GCC-compatible for driver flags. Key differences:
- Clang does not support all GCC-specific attributes; check with
__has_attribute(foo) -Weverythingenables all Clang warnings (no GCC equivalent); too noisy for production, useful for one-off audits- Some GCC intrinsics need
#include <x86intrin.h>on Clang too __int128is supported;__float128requires-lquadmathon some targets
8. macOS specifics
On macOS, clang is the system compiler (Apple LLVM). Key points:
ld64is the default linker;lldrequires explicit-fuse-ld=lldand Homebrew LLVM- Use
-mmacosx-version-min=X.Yto set deployment target - Sanitizers on macOS use
DYLD_INSERT_LIBRARIES; do not strip the binary xcrun clangresolves to the Xcode toolchain clang
For flag reference, see references/flags.md. For clang-tidy config examples, see references/clang-tidy.md.
Related skills
- Use
skills/compilers/gccfor GCC-equivalent flag mapping - Use
skills/runtimes/sanitizersfor-fsanitize=*workflows - Use
skills/compilers/llvmfor IR-level work (opt,llc,llvm-dis) - Use
skills/compilers/msvc-clforclang-clon Windows - Use
skills/binaries/linkers-ltofor linker-level LTO details
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

