LLVM-CXXFILT(1)

πŸ’… LLVM-CXXFILT(1) β€” bestie's guide to the LLVM symbol name demangler πŸŽ€

ok so real talk, this is the llvm-cxxfilt page from the LLVM manual set, and it's genuinely one of the most useful little tools ever. let's get into it πŸ’–


✨ NAME ✨

llvm-cxxfilt β€” the LLVM symbol name demangler, aka the thing that turns cursed mangled goo back into readable C++ 🫢


🌸 SYNOPSIS 🌸

llvm-cxxfilt [options] [mangled names...]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so llvm-cxxfilt is a symbol demangler, and here's the slay part: you can literally use it as a drop-in replacement for the GNU c++filt tool. iconic behavior honestly πŸ‘‘

give it a series of symbol names and it prints their demangled form on the standard output stream. and if a name can't be demangled? no stress, no drama β€” it just gets printed as is. it's giving "no thoughts, just pass through" πŸ’…

and if you don't pass any names on the command-line at all, it reads names interactively from the standard input stream. but wait β€” when it's reading from standard input, there's a whole little algorithm going on: each input line gets split on characters that are not part of valid Itanium name manglings, i.e. characters that are not alphanumeric, ., $, or _. and the separators between names get copied to the output as is, so your formatting stays intact. the way it just preserves your vibes πŸ˜­πŸ’–


πŸ”₯ EXAMPLE πŸ”₯

like, look at this, it works exactly like you'd hope:

$ llvm-cxxfilt _Z3foov _Z3bari not_mangled
foo()
bar(int)
not_mangled
$ cat input.txt
| _Z3foov *** _Z3bari *** not_mangled |
$ llvm-cxxfilt < input.txt
| foo() *** bar(int) *** not_mangled |

see how not_mangled came out the other side completely untouched? and all those *** separators stayed put? that's the whole point bestie, it ate and left no crumbs πŸ“


🧚 OPTIONS 🧚

  • --format=<value>, -s β€” which mangling scheme to assume. valid values are auto (the default β€” it auto-detects the style for you, very main character of it) and gnu (assume GNU/Itanium style). pick your fighter πŸ’«
  • --help, -h β€” prints a summary of the command line options. classic, reliable, always there for you 🫢
  • --no-params, -p β€” do not demangle function parameters or return types. so you get the bare name and that's it βœ‚οΈ
  • --no-strip-underscore, -n β€” do not strip a leading underscore. heads up: this is the default for all platforms, so it's already doing this unless you say otherwise πŸ™ˆ
  • --quote β€” adds " " around demangled names. and no double-dipping: it does not quote names that are already quoted πŸ’¬
  • --strip-underscore, -_ β€” strips a single leading underscore (if there is one) from each input name before demangling. note the option itself is literally an underscore, yes really πŸ’€
  • --types, -t β€” attempts to demangle names as type names as well as symbol names. equal opportunity demangling 🌈
  • --version β€” displays the version of the llvm-cxxfilt executable. for the girlies who need to know exactly what they're running ⭐
  • @<FILE> β€” reads command-line options from the response file <FILE>. cute little options-in-a-file situation πŸŽ€

πŸ’€ EXIT STATUS πŸ’€

llvm-cxxfilt returns 0 unless it encounters a usage error β€” in which case you get a non-zero exit code. lowkey fair tbh. don't misuse the tool and it won't be shady back ✨


πŸ‘‘ SEE ALSO πŸ‘‘

go read that one next, iykyk πŸ’œ


🫢 Author 🫢

Maintained by the LLVM Team (https://llvm.org/). we stan a whole team keeping this thing alive πŸ’–

2003-2026, LLVM Project


and that's the page!! ngl this one is a little legend β€” page 23, dated 2026-10-20, and it's the LLVM-CXXFILT(1) manual page through and through. go demangle something cursed, bestie, you've got this πŸŒΈπŸ¦‹πŸ’…

πŸ“¦ where this page comes from
  • arch rolling: llvm 23.1.4-1 Β· Apache-2.0 WITH LLVM-exception
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms