mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-10 21:06:33 +03:00
27 lines
982 B
D
27 lines
982 B
D
// Tests debug info generation for nested functions
|
|
// REQUIRES: atleast_llvm308
|
|
// RUN: %ldc -g -c -output-ll -of=%t.ll %s && FileCheck %s < %t.ll
|
|
|
|
// CHECK: define {{.*}} @{{.*}}encloser
|
|
// CHECK-SAME: !dbg
|
|
void encloser(int arg0, int arg1)
|
|
{
|
|
// CHECK: @llvm.dbg.declare{{.*}}%enc_n{{.*}}enc_n
|
|
int enc_n;
|
|
|
|
// CHECK-LABEL: define {{.*}}encloser{{.*}}nested
|
|
void nested(int nes_i)
|
|
{
|
|
// CHECK: @llvm.dbg.declare{{.*}}%nestedFrame{{.*}}arg1
|
|
arg0 = arg1 = enc_n = nes_i; // accessing arg0, arg1 and enc_n from a nested function turns them into closure variables
|
|
|
|
// nes_i and arg1 have the same parameter index in the generated IR, if both get declared as
|
|
// function parameters this triggers off an assert in LLVM >=3.8 (see Github PR #1598)
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: !DISubprogram(name:{{.*}}"{{.*}}encloser.nested"
|
|
// CHECK: !DILocalVariable{{.*}}nes_i
|
|
// CHECK: !DILocalVariable{{.*}}arg1
|
|
// CHECK-NOT: arg:
|
|
// CHECK-SAME: ){{$}}
|