Skip to content
Back to skills

Clang

ASecurity

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.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 17, 2026
code-qualitygoc++bashperformance

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 17, 2026

npx -y skills add NetVar1337/agent-skill-canon --skill clang --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Clang?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Clang
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/netvar1337-clang/badge)](https://www.skillsdirectory.com/skills/netvar1337-clang)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Files in this skill

  • SKILL.md5.4 KB
  • references/clang-tidy.md1.9 KB
  • references/flags.md3.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.