Most of the cases were where a C++ file was being compiled with the C substitution. There were a few cases of the opposite though. LLDB seems to be the only real culprit in the LLVM codebase for these mismatches. Rest of the LLVM presumably sticks at least language-specific options in the common substitutions making the mistakes immediately apparent. I found these by using Clang frontend configuration files containing language-specific options for both C and C++ (e.g. `-std=c2y` and `-std=c++26`).
40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
Plaintext
# Test the ${function.is-inlined} frame-format variable.
|
|
|
|
# Windows' link.exe does not preserve DWARF information, and we cannot get
|
|
# inlining information from PDB at this time, see:
|
|
# https://github.com/llvm/llvm-project/issues/143104
|
|
# REQUIRES: (system-windows && lld) || !system-windows
|
|
|
|
# RUN: split-file %s %t
|
|
# RUN: %clangxx_host -g -gdwarf %t/main.cpp -o %t.out %if system-windows %{-fuse-ld=lld%}
|
|
# RUN: %lldb -x -b -s %t/commands.input %t.out -o exit 2>&1 \
|
|
# RUN: | FileCheck %s
|
|
|
|
#--- main.cpp
|
|
|
|
void regular();
|
|
|
|
[[clang::always_inline]] void inlined1() {
|
|
regular();
|
|
}
|
|
void regular() {inlined1();}
|
|
[[clang::always_inline]] void inlined2() {regular();}
|
|
|
|
int main() {
|
|
inlined2();
|
|
return 0;
|
|
}
|
|
|
|
#--- commands.input
|
|
|
|
settings set frame-format "frame '${function.name}{${function.is-inlined} (Inlined)}'\n"
|
|
breakpoint set -n inlined1
|
|
run
|
|
bt
|
|
|
|
# CHECK: (lldb) bt
|
|
# CHECK: frame '{{.*}}inlined1({{.*}}) (Inlined)'
|
|
# CHECK-NEXT: frame '{{.*}}regular({{.*}})'
|
|
# CHECK-NEXT: frame '{{.*}}inlined2({{.*}}) (Inlined)'
|
|
# CHECK-NEXT: frame 'main'
|