diff options
Diffstat (limited to 'clang/test/CodeGen/debug-info-extern-call.c')
-rw-r--r-- | clang/test/CodeGen/debug-info-extern-call.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/clang/test/CodeGen/debug-info-extern-call.c b/clang/test/CodeGen/debug-info-extern-call.c index e35669b78f9..da3764f7359 100644 --- a/clang/test/CodeGen/debug-info-extern-call.c +++ b/clang/test/CodeGen/debug-info-extern-call.c @@ -1,15 +1,39 @@ -// RUN: %clang -Xclang -femit-debug-entry-values -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-EXT -// CHECK-EXT: !DISubprogram(name: "fn1" +// When entry values are emitted, expect a subprogram for extern decls so that +// the dwarf generator can describe call site parameters at extern call sites. +// +// RUN: %clang -Xclang -femit-debug-entry-values -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - \ +// RUN: | FileCheck %s -check-prefix=DECLS-FOR-EXTERN -// RUN: %clang -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - | FileCheck %s -// CHECK-NOT: !DISubprogram(name: "fn1" +// Similarly, when the debugger tuning is gdb, expect a subprogram for extern +// decls so that the dwarf generator can describe information needed for tail +// call frame reconstrution. +// +// RUN: %clang -g -O2 -target x86_64-none-linux-gnu -ggdb -S -emit-llvm %s -o - \ +// RUN: | FileCheck %s -check-prefix=DECLS-FOR-EXTERN +// +// Do not emit a subprogram for extern decls when entry values are disabled and +// the tuning is not set to gdb. +// +// RUN: %clang -g -O2 -target x86_64-none-linux-gnu -gsce -S -emit-llvm %s -o - \ +// RUN: | FileCheck %s -check-prefix=NO-DECLS-FOR-EXTERN + +// DECLS-FOR-EXTERN: !DISubprogram(name: "fn1" +// DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "memcmp" +// DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "__some_reserved_name" + +// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "fn1" +// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "memcmp" +// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "__some_reserved_name" extern int fn1(int a, int b); +extern int memcmp(const void *s1, const void *s2, unsigned long n); +extern void __some_reserved_name(void); -int fn2 () { +int fn2 (int *src, int *dst) { int x = 4, y = 5; int res = fn1(x, y); - - return res; + int res2 = memcmp(dst, src, res); + __some_reserved_name(); + return res + res2; } |