diff options
Diffstat (limited to 'clang/test/CodeGenCXX/tmp-md-nodes3.cpp')
| -rw-r--r-- | clang/test/CodeGenCXX/tmp-md-nodes3.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/tmp-md-nodes3.cpp b/clang/test/CodeGenCXX/tmp-md-nodes3.cpp new file mode 100644 index 0000000..4656f64 --- /dev/null +++ b/clang/test/CodeGenCXX/tmp-md-nodes3.cpp @@ -0,0 +1,53 @@ +// REQUIRES: asserts, riscv-registered-target +// Should trigger GenerateVarArgsThunk. +// RUN: %clang_cc1 -O0 -triple riscv64-linux-gnu -debug-info-kind=limited -emit-llvm %s -o - | \ +// RUN: FileCheck %s + +// RUN: %clang_cc1 -O0 -triple riscv64-linux-gnu -debug-info-kind=limited -emit-obj %s -o - | \ +// RUN: llvm-dwarfdump --verify - + +// This test checks that clang doesn't crash when creating a varargs thunk +// by cloning a function which DILocalVariable types are unresolved at cloning +// time. +// In such case, as a workaround, instead of cloning unresolved types for +// the thunk, clang produces thunk DILocalVariables that refer to local +// types from the original DISubprogram. + +typedef signed char __int8_t; +typedef int BOOL; +class CMsgAgent; + +class CFs { +public: + typedef enum {} CACHE_HINT; + virtual BOOL ReqCacheHint( CMsgAgent* p_ma, CACHE_HINT hint, ... ) ; +}; + +typedef struct {} _Lldiv_t; + +class CBdVfs { +public: + virtual ~CBdVfs( ) {} +}; + +class CBdVfsImpl : public CBdVfs, public CFs { + BOOL ReqCacheHint( CMsgAgent* p_ma, CACHE_HINT hint, ... ); +}; + +BOOL CBdVfsImpl::ReqCacheHint( CMsgAgent* p_ma, CACHE_HINT hint, ... ) { + // Complete enum with no defintion. Clang allows to declare variables of + // such type. + enum class E : int; + E enum_var; + // Structure has forward declaration. DIDerivedType which is a pointer + // to it is unresolved during debug info generation for the function. + struct LocalStruct; + LocalStruct *struct_var; + + struct GlobalStruct {}; + + return true; +} + +// Check that thunk is emitted. +// CHECK: define {{.*}} @_ZThn{{[48]}}_N10CBdVfsImpl12ReqCacheHintEP9CMsgAgentN3CFs10CACHE_HINTEz( |
