mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-18 10:24:45 +00:00
DI: Rewrite the DIBuilder local variable API
Replace the general `createLocalVariable()` with two more specific functions: `createParameterVariable()` and `createAutoVariable()`, and rewrite the documentation. Besides cleaning up the API, this avoids exposing the fake DWARF tags `DW_TAG_arg_variable` and `DW_TAG_auto_variable` to frontends, and is preparation for removing them completely. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243764 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -602,15 +602,18 @@ DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
|
||||
.release();
|
||||
}
|
||||
|
||||
DILocalVariable *DIBuilder::createLocalVariable(
|
||||
unsigned Tag, DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo,
|
||||
DIType *Ty, bool AlwaysPreserve, unsigned Flags, unsigned ArgNo) {
|
||||
static DILocalVariable *createLocalVariable(
|
||||
LLVMContext &VMContext,
|
||||
DenseMap<MDNode *, std::vector<TrackingMDNodeRef>> &PreservedVariables,
|
||||
DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty, bool AlwaysPreserve, unsigned Flags) {
|
||||
// FIXME: Why getNonCompileUnitScope()?
|
||||
// FIXME: Why is "!Context" okay here?
|
||||
// FIXME: Why doesn't this check for a subprogram or lexical block (AFAICT
|
||||
// the only valid scopes)?
|
||||
DIScope *Context = getNonCompileUnitScope(Scope);
|
||||
|
||||
dwarf::Tag Tag = ArgNo ? dwarf::DW_TAG_arg_variable : dwarf::DW_TAG_auto_variable;
|
||||
auto *Node = DILocalVariable::get(
|
||||
VMContext, Tag, cast_or_null<DILocalScope>(Context), Name, File, LineNo,
|
||||
DITypeRef::get(Ty), ArgNo, Flags);
|
||||
@@ -625,6 +628,23 @@ DILocalVariable *DIBuilder::createLocalVariable(
|
||||
return Node;
|
||||
}
|
||||
|
||||
DILocalVariable *DIBuilder::createAutoVariable(DIScope *Scope, StringRef Name,
|
||||
DIFile *File, unsigned LineNo,
|
||||
DIType *Ty, bool AlwaysPreserve,
|
||||
unsigned Flags) {
|
||||
return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
|
||||
/* ArgNo */ 0, File, LineNo, Ty, AlwaysPreserve,
|
||||
Flags);
|
||||
}
|
||||
|
||||
DILocalVariable *DIBuilder::createParameterVariable(
|
||||
DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty, bool AlwaysPreserve, unsigned Flags) {
|
||||
assert(ArgNo && "Expected non-zero argument number for parameter");
|
||||
return createLocalVariable(VMContext, PreservedVariables, Scope, Name, ArgNo,
|
||||
File, LineNo, Ty, AlwaysPreserve, Flags);
|
||||
}
|
||||
|
||||
DIExpression *DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
|
||||
return DIExpression::get(VMContext, Addr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user