К основному содержанию
скилл CX Codex

clang — скилл для Claude Code: что делает и как установить

Настраивает компилятор Clang, флаги оптимизации и линковщик lld в проектах на C и C++. Помогает включить статический анализ и ThinLTO.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill clang -a claude-code
Открыть на GitHub

Что делает clang

Скилл обучает ассистента тонкостям сборки через clang и clang++. Он задаёт параметры точной диагностики, отображения деревьев ошибок в шаблонах C++ и подсказок по исправлению кода. Ассистент сразу подбирает нужные ключи: от лимита вывода ошибок -ferror-limit до флагов агрессивного сжатия размера бинарника -Oz.

Внутри собраны готовые цепочки команд для профилирования PGO через llvm-profdata, быстрой линковки ThinLTO и анализа отчётов оптимизатора (-Rpass). Отчёты показывают причины отказа от векторизации циклов или встраивания функций. Линковщик lld нужно ставить отдельно, иначе флаг -fuse-ld=lld вызовет ошибку компоновки.

Инструкции также охватывают запуск clang-tidy с автоматическим исправлением дефектов и особенности компилятора Apple LLVM на macOS.

Какие задачи решает

  • Разобрать причины пропуска векторизации циклов через -Rpass-analysis
  • Настроить быструю линковку через ThinLTO и компоновщик lld
  • Запустить статический анализ кода с помощью clang-tidy и автоисправлением
  • Собрать профиль выполнения для PGO-оптимизации через llvm-profdata

Примеры запросов агенту

  • Покажи замечания компилятора Clang о том, почему не сработала векторизация цикла в calc.c
  • Собери проект с флагами ThinLTO и линковщиком lld
  • Запусти clang-tidy для src/main.cpp с проверками bugprone и примени исправления

Как установить clang

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill clang -a claude-code

2Вручную: положить файлы

~/.claude/skills/clang/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/clang/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о clang

Как установить clang в Claude Code?

Выполните команду npx skills add mohitmishra786/low-level-dev-skills --skill clang -a claude-code. Скилл сразу загрузится в окружение ассистента.

Что делает скилл clang?

Он даёт ассистенту правила работы с компиляторами clang и clang++. Сюда входят флаги оптимизации, статический анализ, интеграция с lld и диагностика сборки.

Чем ThinLTO в Clang отличается от обычной LTO?

Флаг -flto=thin ускоряет этап линковки в 5–10 раз по сравнению с полным LTO. При этом качество сгенерированного кода остаётся практически на том же уровне.

Исходный текст

SKILL.md · MIT
---
name: clang
description: 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.
---

# 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

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Похожие скиллы

Все скиллы по теме «Языки программирования» →
migrate-to-shoehorn Matt Pocock Переводит type assertions с as в тестах на функции из @total-typescript/shoehorn. Нужен для частичных объектов и намеренно неверных данных в проверках. 475 388установок write-swift emilkowalski Скилл помогает писать, проверять и переносить код на Swift с учётом модели языка. Подойдёт, когда нужно разобраться с конкурентностью, ошибкой или циклом удержания объектов. CX Codex +1 119 300установок megacave JuliusBrussee Переводит ответы ассистента на классический китайский язык (вэньянь) для экономии места на экране. Активируется командами /megacave или /caveman wenyan. CX Codex +1 25 400установок find-docs upstash Тянет актуальную документацию, справочники API и примеры кода для любой библиотеки через Context7 CLI. Пригодится, когда агент отвечает по устаревшим данным обучения. CX Codex +1 9 400установок typescript-advanced-types Seth Hobson Помогает агенту писать сложную типизацию TypeScript: generics, conditional types и преобразования типов. Нужен для библиотек, API-клиентов и строгих конфигураций. CX Codex 92 169установок smart-explore thedotmack Структурно ищет функции и классы через tree-sitter. Пригодится, когда нужно разобраться в кодовой базе без чтения всех файлов. CX Codex +1 7 300установок

Из того же набора62

gdb Ведёт агента по сессии GDB: точки останова, просмотр переменных, разбор падений, реверс-отладка и удалённая отладка через gdbserver. CX Codex +1 936установок llvm Скилл для работы с LLVM IR: генерация промежуточного представления, прогон пассов через opt, понижение до ассемблера через llc и разбор упущенных оптимизаций. CX Codex +1 899установок core-dumps Учит агента включать core dumps, грузить их в GDB или LLDB и снимать стек без повторного запуска упавшей программы. CX Codex +1 764установок linux-perf Ведёт агента по perf на Linux: сэмплирование, счётчики железа, поиск горячих функций и сборка флеймграфов. Полезен, когда программа тормозит, а непонятно где. CX Codex +1 753установок gcc Подсказывает агенту флаги GCC для debug и release, разбирает ошибки компиляции и настраивает LTO с PGO. CX Codex +1 690установок cross-gcc Проведёт агента через настройку кросс-компиляции на GCC: триплеты, sysroot, pkg-config, тесты под QEMU и разбор типовых ошибок. CX Codex +1 682установок valgrind Ведёт агента по инструментам Valgrind: Memcheck ищет утечки и use-after-free, Cachegrind и Callgrind показывают промахи кэша и граф вызовов, Massif — рост кучи. CX Codex +1 678установок flamegraphs Помогает собирать SVG-флеймграфы из данных профилировщиков и находить узкие места по ширине и высоте фреймов в стеке. CX Codex +1 673установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой