Manpage logo

kefir-cc1 - C17/C23 language compiler


kefir-cc1(1) General Commands Manual kefir-cc1(1)

NAME

kefir-cc1 — C17/C23 language compiler

SYNOPSIS

kefir-cc1 [options] [file]

DESCRIPTION

kefir-cc1 is a C17/C23 language compiler (without a driver). If no input file is provided, stdin is used.

OPTIONS
−−c17-standard

Use C17 language language standard.

−−c23-standard

Use C23 language language standard.

−−pp-timestamp timestamp

Override preprocessor timestamp

−−json-errors

Print errors in JSON format to stderr

−−tabular-errors

Print errors in tabular format to stderr

−−target-profile profile

Generate code for specified target (see “TARGET” subsection)

−−source-id identifier

Force use provided source file identifier

−−extension-lib libpath

Load extension library

−−quote-include-dir dir

Add directory to include search path exclusively for quoted includes

−−system-include-dir dir

Add directory to include search path and mark it as a system include path (used for dependency output)

−−embed-dir directory

Add directory to preprocessor embed search path

−−debug-info

Include debug information into produced output

−−optimizer-max-inline-depth depth

Maximum depth of function inlining (5 by default).

−−optimizer-max-inlines-per-func inlines

Maximum number of inlined functions (10 by default).

−−enable-lowering

Perform target-specific SSA lowering (mandatory for bit-precise integer support) [default]

−−disable-lowering

Skip target-specific SSA lowering.

−−preprocessor-assembly-mode

Enable assembly preprocessing mode (default for .S files). In this mode, leading ’$’ characters are not treated as identifier part.

−−preprocessor-normal-mode

Disable assembly preprocessing mode (default).

−−dump-dependencies

Output a make rule describing the dependencies of source file.

−−system-dependencies

Include dependencies from system include directories into the make rule (used with −−dump-dependencies flag) [default: on].

−−no-system-dependencies

Do not include dependencies from system include directories into the make rule (used with −−dump-dependencies flag).

−−add-phony-targets

Generate phony make targets for each dependency (used with −−dump-dependencies flag) [default: off].

−−no-add-phony-targets

Do not generate phony make targets for each dependency (used with −−dump-dependencies

−−dependency-target target

Override default make rule target (used with −−dump-dependencies flag).

−−dependency-output filename

Output make rule into specified file (used with −−dump-dependencies flag).

−−unsigned-char

Let the type char be unsigned. By default, it is target-specific.

−−signed-char

Let the type char be signed. By default, it is target-specific.

−−codegen-tentative-common

Place tentative definitions into common section (equivalent to common attribute applied to all variables).

−−codegen-tentative-no-common

Do not place tentative definitions into common section [default].

−−codegen-visibility-default

Keep default visibility for all symbols [default].

−−codegen-visibility-hidden

Make all symbols hidden unless an attribute specifies otherwise.

−−codegen-visibility-protected

Make all symbols protected unless an attribute specifies otherwise.

−−codegen-visibility-internal

Make all symbols internal unless an attribute specifies otherwise.

−−feature-[name]

Enable compiler feature (see “FEATURES” subsection)

−−no-feature-[name]

Disable compiler feature (see “FEATURES” subsection)

−−internal-[flag]

Enable compiler internal flag (see “INTERNALS” subsection)

−−no-internal-[flag]

Disable compiler internal flag (see “INTERNALS” subsection)

−−codegen-[option]

Enable option for code generator (see “CODEGEN” subsection)

−−no-codegen-[option]

Disable option for code generator (see “CODEGEN” subsection)

−−optimizer-pipeline spec

Optimizer pipeline specification (see “OPTIMIZER” subsection)

−−precise-bitfield-load-store

Load and store bitfields at byte boundaries [default: on]. Provides extra correctness for structures allocated close to a boundary with unmapped memory pages at the expense of less efficient bitfield handling. Does not change bitfield layout.

−−no-precise-bitfield-load-store

Load and store bitfields at machine word boundaries [default: off]. May cause failures for structures allocated close to boundaries with unmapped memory pages. Does not change bitfield layout.

−−declare-atomic-support

Declare support of atomics (might require explicit linking of software atomic library such as libatomic or libcompiler_rt).

−−no-declare-atomic-support

Declare the absence of atomic support via defining __STDC_NO_ATOMICS__ macro.

−−optimize-stack-frame

Optimize stack frame layout by reusing space for variables for disjoint lifetimes. Might increase compilation time and memory use on very large functions. [default: on].

−−no-optimize-stack-frame

Do not optimize stack frame layout and allocate each variable separately.

FEATURES

Supported features (to be used with −−feature-[feature-name] and −−no-feature-[feature-name] flags) -- disabled by default:

fail-on-attributes

Fail if __attribute__((...)) is encountered

missing-function-return-type

Permit function definitions with missing return type

designated-init-colons

Permit "fieldname:" syntax in designated initializers

labels-as-values

Permit label-addressing with && operator

non-strict-qualifiers

Disable strict qualifier checks for pointers

signed-enums

Force all enums to have signed integral type

implicit-function-decl

Permit implicit funciton declarations at use-site

empty-structs

Permit empty structure/union definitions

ext-pointer-arithmetics

Permit pointer arithmetics with function and void pointers

missing-braces-subobj

Permit missing braces for subobject initialization with scalar

statement-expressions

Enable statement expressions

omitted-conditional-operand

Permit omission of the middle ternary expression operand

int-to-pointer

Permit any integral type conversion to pointer

permissive-pointer-conv

Permit conversions between any pointer types

named-macro-vararg

Permit named macro variable arguments

include-next

Permit include_next preprocessor directive

fail-on-assembly

Disable support of inline assembly

va-args-comma-concat

Enable special processing for ", ##__VA_ARGS" case in preprocessor

switch-case-ranges

Enable support for ranges in switch cases

designator-subscript-ranges

Enable support for ranges in designator subscripts

CODEGEN

Supported code geneator options (to be used with −−codegen-[option] and −−no-codegen-[option] flags):

emulated-tls

Use emulated TLS [disabled by default, enabled on openbsd platform]

tls-common

Generate common section for thread-local storage if respective attribute is on [enabled for linux and netbsd]

pic

Generate position-independent code

omit-frame-pointer

Omit frame pointer in leaf function that do not need it

valgrind-compatible-x87

Replace x87 opcodes not supported by Valgrind by more expensive alternatives [default: on]

syntax=SYNTAX

Produce assembly output with specified syntax [x86_64-intel_noprefix, x86_64-intel_prefix, x86_64-att (default)]

details=DETAILS-SPEC

Augment assembly output with internal code generator details in comments. DETAILS-SPEC can be: vasm (virtual assembly), vasm+regs (virtual assembly and register allocations), devasm (devirtualized assembly).

pipeline=PIPELINE-SPEC

Code generator transformation pipeline specification (not supported for native-* targets) consists of comma separated names of pipeline passes:

noop

No-operation pass

amd64-drop-virtual

Non-functional virtual instruction elimination for amd64 targets

amd64-peephole

Peephole optimizations for amd64 targets

OPTIMIZER

Optimizer pipeline specification consists of comma separated names of optimization pipeline passes:

noop

No-operation pass

phi-propagate

Wherever possible, substitue phi nodes of SSA representation by actual references

mem2reg

Pull function local variables into registers

op-simplify

General code simplification

constant-fold

Folding constant expressions

gvn

Global value numering pass to eliminate redundant arithmetic and bitwise operations

local-alloc-sink

Moving local variable allocations closer to their actual uses (does not affect effective variable lifetimes).

dead-code-elimination

Eliminating dead code, blocks and phi links.

block-merge

Remove unnecessary jump instructions and merge respective blocks.

dead-alloc

Remove dead local variable allocations.

inline-func

Perform function inlining.

tail-calls

Perform tail call optimization.

lowering

Perform target-specific lowering of the SSA representation. Mandatory for bit-precise integer support.

TARGET

Supported compilation targets:

amd64-sysv-gas

Produce optimized GNU As-compatible assembly adhering System-V AMD64 ABI [default]

EXIT STATUS

Normally kefir-cc1 exits with 0 exit code. In case of any errors in any of compilation stages, all further compilation is aborted and non-zero exit code retruned.

STANDARDS

kefir-cc1 implements C17 language standard as specified in its final draft, and C23 language stadard (except _Decimal support) as specified in the first draft of C2Y.

NOTES

The kefir-cc1 compiler is licensed under the terms of GNU GPLv3 license.

kefir-cc1 is developed and maintained by Jevgenij Protopopov (legally: Jevgenijs Protopopovs)

Please report bugs found in kefir-cc1 to [email protected]

kefir-cc1 is available online at https://sr.ht/~jprotopopov/kefir/ with read-only mirrors at https://git.protopopov.lv/kefir and https://codeberg.org/jprotopopov/kefir GNU September 2025 kefir-cc1(1)


Updated 2026-06-01 - jenkler.se | uex.se