On Wed, Oct 16, 2013 at 6:31 PM, Eric Christopher <[email protected]>wrote:
> Author: echristo > Date: Wed Oct 16 20:31:21 2013 > New Revision: 192862 > > URL: http://llvm.org/viewvc/llvm-project?rev=192862&view=rev > Log: > Add the context that a function was created in as the context for the > function, not the context of the context. > > Added: > cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp > Modified: > cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=192862&r1=192861&r2=192862&view=diff > > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Wed Oct 16 20:31:21 2013 > @@ -2475,11 +2475,11 @@ void CGDebugInfo::EmitFunctionStart(Glob > > if (DebugKind >= CodeGenOptions::LimitedDebugInfo) { > if (const NamespaceDecl *NSDecl = > - dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext())) > + dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext())) > FDContext = getOrCreateNameSpace(NSDecl); > else if (const RecordDecl *RDecl = > - dyn_cast_or_null<RecordDecl>(FD->getDeclContext())) > - FDContext = > getContextDescriptor(cast<Decl>(RDecl->getDeclContext())); > + dyn_cast_or_null<RecordDecl>(FD->getDeclContext())) > + FDContext = getContextDescriptor(cast<Decl>(RDecl)); > > // Collect template parameters. > TParamsArray = CollectFunctionTemplateParams(FD, Unit); > @@ -2499,11 +2499,13 @@ void CGDebugInfo::EmitFunctionStart(Glob > if (!HasDecl || D->isImplicit()) > Flags |= llvm::DIDescriptor::FlagArtificial; > > - llvm::DISubprogram SP = DBuilder.createFunction( > - FDContext, Name, LinkageName, Unit, LineNo, > - getOrCreateFunctionType(D, FnType, Unit), Fn->hasInternalLinkage(), > - true /*definition*/, getLineNumber(CurLoc), Flags, > - CGM.getLangOpts().Optimize, Fn, TParamsArray, > getFunctionDeclaration(D)); > + llvm::DISubprogram SP = > + DBuilder.createFunction(FDContext, Name, LinkageName, Unit, LineNo, > + getOrCreateFunctionType(D, FnType, Unit), > + Fn->hasInternalLinkage(), true > /*definition*/, > + getLineNumber(CurLoc), Flags, > + CGM.getLangOpts().Optimize, Fn, > TParamsArray, > + getFunctionDeclaration(D)); > if (HasDecl) > DeclCache.insert(std::make_pair(D->getCanonicalDecl(), > llvm::WeakVH(SP))); > > > Added: cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp?rev=192862&view=auto > > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp (added) > +++ cfe/trunk/test/CodeGenCXX/debug-info-function-context.cpp Wed Oct 16 > 20:31:21 2013 > @@ -0,0 +1,36 @@ > +// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-pc-linux-gnu %s -o - | > FileCheck %s > + > +struct C { > + void member_function(); > + static int static_member_function(); > + static int static_member_variable; > +}; > + > +int C::static_member_variable = 0; > + > +void C::member_function() { static_member_variable = 0; } > + > +int C::static_member_function() { return static_member_variable; } > + > +C global_variable; > + > +int global_function() { return -1; } > + > +namespace ns { > +void global_namespace_function() { global_variable.member_function(); } > +int global_namespace_variable = 1; > +} > + > +// Check that the functions that belong to C have C as a context and the > +// functions that belong to the namespace have it as a context, and the > global > +// function has the file as a context. > Is this right, though? In the actual DWARF the parent of a member function definition is generally not the type itself - the definitions are out of line (so the parent is usually the CU, I guess?), aren't they? Is this change going to cause these definitions to end up as children of the type DIE? > + > +// CHECK: metadata !"_ZTS1C", metadata !"member_function"{{.*}} [ > DW_TAG_subprogram ] [line 11] [def] [member_function] > + > +// CHECK: metadata !"_ZTS1C", metadata !"static_member_function"{{.*}} [ > DW_TAG_subprogram ] [line 13] [def] [static_member_function] > + > +// CHECK: metadata !22, metadata !"global_function"{{.*}} [ > DW_TAG_subprogram ] [line 17] [def] [global_function] > +// CHECK: !22 = {{.*}} [ DW_TAG_file_type ] > + > +// CHECK: metadata !24, metadata !"global_namespace_function"{{.*}} [ > DW_TAG_subprogram ] [line 20] [def] [global_namespace_function] > +// CHECK: !24 = {{.*}} [ DW_TAG_namespace ] [ns] [line 19] > > > _______________________________________________ > 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
