clang
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.
What this skill does
# 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 ```bash # 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.cpp ``` Clang'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: ```bash # 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.yaml ``` Interpret remarks: - `remark: foo inlined into bar` — inlining happened; good for hot paths - `remark: loop not vectorized: loop control flow is not understood` — restructure the loop - `remark: not vectorized: cannot prove it is safe to reorder...` — add `__restrict__` or `#pragma clang loop vectorize(assume_safety)` ### 4. Static analysis ```bash # 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 modernisation - `performance-*`: unnecessary copies, move candidates - `readability-*`: naming, complexity ### 5. LTO with lld ```bash # 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 -1 ``` For large projects, ThinLTO is preferred: link times 5-10x faster than full LTO with comparable code quality. ### 6. PGO (LLVM instrumentation) ```bash # 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 prog ``` AutoFDO (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)` - `-Weverything` enables 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 - `__int128` is supported; `__float128` requires `-lquadmath` on some targets ### 8. macOS specifics On macOS, `clang` is the system compiler (Apple LLVM). Key points: - `ld64` is the default linker; `lld` requires explicit `-fuse-ld=lld` and Homebrew LLVM - Use `-mmacosx-version-min=X.Y` to set deployment target - Sanitizers on macOS use `DYLD_INSERT_LIBRARIES`; do not strip the binary - `xcrun clang` resolves to the Xcode toolchain clang For flag reference, see [references/flags.md](references/flags.md). For clang-tidy config examples, see [references/clang-tidy.md](references/clang-tidy.md). ## Related skills - Use `skills/compilers/gcc` for GCC-equivalent flag mapping - Use `skills/runtimes/sanitizers` for `-fsanitize=*` workflows - Use `skills/compilers/llvm` for IR-level work (`opt`, `llc`, `llvm-dis`) - Use `skills/compilers/msvc-cl` for `clang-cl` on Windows - Use `skills/binaries/linkers-lto` for linker-level LTO details
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.