On Thu Nov 06 2014 at 3:17:40 PM Frédéric Riss <[email protected]> wrote:
> On Nov 6, 2014, at 2:57 PM, Eric Christopher <[email protected]> wrote: > > Hrm. Testcase? Where were you seeing it? > > > Unfortunately there is nothing here to test, because it actually worked. > As you know, you can wrap any DIDescriptor into any other type of > DIDescriptor as long as you don’t access the fields or .verify() the > result. Here the resulting DIScope was just used to pass along the DbgNode > (look at r221466 for a tiny bit more context). > > I’ve noticed it while working on debug info generation for forward > declarations (review to come soonish). getDeclarationOrDefinition takes the > result of the DeclMap lookup and puts it into a DIScope, even if what was > came out of the map wasn’t a DIScope (and it’s a sure thing that the > DIGlobalVariable stored there aren’t DIScopes). > > Sounds good. Thanks! -eric > Fred > > -eric > > On Thu Nov 06 2014 at 1:30:34 PM Frederic Riss <[email protected]> wrote: > >> Author: friss >> Date: Thu Nov 6 15:12:06 2014 >> New Revision: 221481 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=221481&view=rev >> Log: >> Return a DIDescriptor from CGDebugInfo::getDeclarationOrDefinition... >> >> ... instead of a DIScope that might wrap something that's not actually >> a DIScope (eg. a DIGlobalVariable); >> >> Modified: >> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> cfe/trunk/lib/CodeGen/CGDebugInfo.h >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CGDebugInfo.cpp?rev=221481&r1=221480&r2=221481&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Nov 6 15:12:06 2014 >> @@ -2307,7 +2307,7 @@ llvm::DIType CGDebugInfo::CreateMemberTy >> return Ty; >> } >> >> -llvm::DIScope CGDebugInfo::getDeclarationOrDefinition(const Decl *D) { >> +llvm::DIDescriptor CGDebugInfo::getDeclarationOrDefinition(const Decl >> *D) { >> // We only need a declaration (not a definition) of the type - so use >> whatever >> // we would otherwise do to get a type for a pointee. (forward >> declarations in >> // limited debug info, full definitions (if the type definition is >> available) >> @@ -2327,7 +2327,7 @@ llvm::DIScope CGDebugInfo::getDeclaratio >> if (I == DeclCache.end()) >> return llvm::DIScope(); >> llvm::Value *V = I->second; >> - return llvm::DIScope(dyn_cast_or_null<llvm::MDNode>(V)); >> + return llvm::DIDescriptor(dyn_cast_or_null<llvm::MDNode>(V)); >> } >> >> /// getFunctionDeclaration - Return debug info descriptor to describe >> method >> @@ -3239,7 +3239,7 @@ void CGDebugInfo::EmitUsingDecl(const Us >> // Emitting one decl is sufficient - debuggers can detect that this is >> an >> // overloaded name & provide lookup for all the overloads. >> const UsingShadowDecl &USD = **UD.shadow_begin(); >> - if (llvm::DIScope Target = >> + if (llvm::DIDescriptor Target = >> getDeclarationOrDefinition(USD.getUnderlyingDecl())) >> DBuilder.createImportedDeclaration( >> getCurrentContextDescriptor(cast<Decl>(USD.getDeclContext())), >> Target, >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ >> CGDebugInfo.h?rev=221481&r1=221480&r2=221481&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Thu Nov 6 15:12:06 2014 >> @@ -363,9 +363,9 @@ private: >> llvm::DIType CreateMemberType(llvm::DIFile Unit, QualType FType, >> StringRef Name, uint64_t *Offset); >> >> - /// \brief Retrieve the DIScope, if any, for the canonical form of this >> + /// \brief Retrieve the DIDescriptor, if any, for the canonical form >> of this >> /// declaration. >> - llvm::DIScope getDeclarationOrDefinition(const Decl *D); >> + llvm::DIDescriptor getDeclarationOrDefinition(const Decl *D); >> >> /// getFunctionDeclaration - Return debug info descriptor to describe >> method >> /// declaration for the given method definition. >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
