[cfe-commits] r166676 - in /cfe/trunk: lib/CodeGen/CGBlocks.cpp lib/CodeGen/CGDebugInfo.cpp lib/CodeGen/CGDeclCXX.cpp lib/CodeGen/CGVTables.cpp test/CodeGenCXX/debug-info-blocks.cpp test/CodeGenCXX/debug-info-global-ctor-dtor.cpp test/CodeGenCXX/

Alexey Samsonov samsonov at google.com
Fri Oct 26 00:02:27 PDT 2012


On Thu, Oct 25, 2012 at 6:46 PM, NAKAMURA Takumi <geek4civic at gmail.com>wrote:

> Alexey, it seems it is failing on i686-*-*. Suppressed in r166683.
> Please investigate.
>

Fixed a test in r166758. Thanks!


>
> ...Takumi
>
> 2012/10/25 Alexey Samsonov <samsonov at google.com>:
> > Author: samsonov
> > Date: Thu Oct 25 05:18:50 2012
> > New Revision: 166676
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=166676&view=rev
> > Log:
> > Initialize debug info for special cases of functions that lack
> declarations and are generated by Clang (global initializers/destructors,
> thunks) . Fixes PR13942.
> >
> > Added:
> >     cfe/trunk/test/CodeGenCXX/debug-info-blocks.cpp
> >     cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp
> >     cfe/trunk/test/CodeGenCXX/debug-info-thunk.cpp
> > Modified:
> >     cfe/trunk/lib/CodeGen/CGBlocks.cpp
> >     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> >     cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
> >     cfe/trunk/lib/CodeGen/CGVTables.cpp
> >
> > Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=166676&r1=166675&r2=166676&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Thu Oct 25 05:18:50 2012
> > @@ -1650,6 +1650,8 @@
> >                                            SC_None,
> >                                            false, false);
> >
> > +  // Initialize debug info if necessary.
> > +  CGF.maybeInitializeDebugInfo();
> >    CGF.StartFunction(FD, R, Fn, FI, args, SourceLocation());
> >
> >    if (byrefInfo.needsCopy()) {
> > @@ -1720,6 +1722,8 @@
> >                                            SC_Static,
> >                                            SC_None,
> >                                            false, false);
> > +  // Initialize debug info if necessary.
> > +  CGF.maybeInitializeDebugInfo();
> >    CGF.StartFunction(FD, R, Fn, FI, args, SourceLocation());
> >
> >    if (byrefInfo.needsDispose()) {
> >
> > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=166676&r1=166675&r2=166676&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Oct 25 05:18:50 2012
> > @@ -2050,14 +2050,22 @@
> >    FnBeginRegionCount.push_back(LexicalBlockStack.size());
> >
> >    const Decl *D = GD.getDecl();
> > +  // Function may lack declaration in source code if it is created by
> Clang
> > +  // CodeGen (examples: _GLOBAL__I_a, __cxx_global_array_dtor, thunk).
> > +  bool HasDecl = (D != 0);
> >    // Use the location of the declaration.
> > -  SourceLocation Loc = D->getLocation();
> > -
> > +  SourceLocation Loc;
> > +  if (HasDecl)
> > +    Loc = D->getLocation();
> > +
> >    unsigned Flags = 0;
> >    llvm::DIFile Unit = getOrCreateFile(Loc);
> >    llvm::DIDescriptor FDContext(Unit);
> >    llvm::DIArray TParamsArray;
> > -  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
> > +  if (!HasDecl) {
> > +    // Use llvm function name.
> > +    Name = Fn->getName();
> > +  } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
> >      // If there is a DISubprogram for this function available then use
> it.
> >      llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::iterator
> >        FI = SPCache.find(FD->getCanonicalDecl());
> > @@ -2104,12 +2112,13 @@
> >      Name = Name.substr(1);
> >
> >    unsigned LineNo = getLineNumber(Loc);
> > -  if (D->isImplicit())
> > +  if (!HasDecl || D->isImplicit())
> >      Flags |= llvm::DIDescriptor::FlagArtificial;
> >
> >    llvm::DIType DIFnType;
> >    llvm::DISubprogram SPDecl;
> > -  if (CGM.getCodeGenOpts().getDebugInfo() >=
> CodeGenOptions::LimitedDebugInfo) {
> > +  if (HasDecl &&
> > +      CGM.getCodeGenOpts().getDebugInfo() >=
> CodeGenOptions::LimitedDebugInfo) {
> >      DIFnType = getOrCreateFunctionType(D, FnType, Unit);
> >      SPDecl = getFunctionDeclaration(D);
> >    } else {
> > @@ -2132,7 +2141,8 @@
> >    // Push function on region stack.
> >    llvm::MDNode *SPN = SP;
> >    LexicalBlockStack.push_back(SPN);
> > -  RegionMap[D] = llvm::WeakVH(SP);
> > +  if (HasDecl)
> > +    RegionMap[D] = llvm::WeakVH(SP);
> >  }
> >
> >  /// EmitLocation - Emit metadata to indicate a change in line/column
> >
> > Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=166676&r1=166675&r2=166676&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Thu Oct 25 05:18:50 2012
> > @@ -163,6 +163,9 @@
> >
> >    CodeGenFunction CGF(CGM);
> >
> > +  // Initialize debug info if needed.
> > +  CGF.maybeInitializeDebugInfo();
> > +
> >    CGF.StartFunction(GlobalDecl(), CGM.getContext().VoidTy, fn,
> >                      CGM.getTypes().arrangeNullaryFunction(),
> >                      FunctionArgList(), SourceLocation());
> > @@ -345,6 +348,9 @@
> >  void CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function *Fn,
> >                                                  llvm::Constant **Decls,
> >                                                  unsigned NumDecls) {
> > +  // Initialize debug info if needed.
> > +  maybeInitializeDebugInfo();
> > +
> >    StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
> >                  getTypes().arrangeNullaryFunction(),
> >                  FunctionArgList(), SourceLocation());
> > @@ -370,6 +376,9 @@
> >  void CodeGenFunction::GenerateCXXGlobalDtorsFunc(llvm::Function *Fn,
> >                    const std::vector<std::pair<llvm::WeakVH,
> llvm::Constant*> >
> >                                                  &DtorsAndObjects) {
> > +  // Initialize debug info if needed.
> > +  maybeInitializeDebugInfo();
> > +
> >    StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
> >                  getTypes().arrangeNullaryFunction(),
> >                  FunctionArgList(), SourceLocation());
> > @@ -406,6 +415,9 @@
> >    llvm::Function *fn =
> >      CreateGlobalInitOrDestructFunction(CGM, FTy,
> "__cxx_global_array_dtor");
> >
> > +  // Initialize debug info if needed.
> > +  maybeInitializeDebugInfo();
> > +
> >    StartFunction(GlobalDecl(), getContext().VoidTy, fn, FI, args,
> >                  SourceLocation());
> >
> >
> > Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=166676&r1=166675&r2=166676&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGVTables.cpp Thu Oct 25 05:18:50 2012
> > @@ -333,7 +333,10 @@
> >
> >      FunctionArgs.push_back(Param);
> >    }
> > -
> > +
> > +  // Initialize debug info if needed.
> > +  maybeInitializeDebugInfo();
> > +
> >    StartFunction(GlobalDecl(), ResultType, Fn, FnInfo, FunctionArgs,
> >                  SourceLocation());
> >
> >
> > Added: cfe/trunk/test/CodeGenCXX/debug-info-blocks.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-blocks.cpp?rev=166676&view=auto
> >
> ==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/debug-info-blocks.cpp (added)
> > +++ cfe/trunk/test/CodeGenCXX/debug-info-blocks.cpp Thu Oct 25 05:18:50
> 2012
> > @@ -0,0 +1,14 @@
> > +// RUN: %clang_cc1 %s -gline-tables-only -fblocks -S -emit-llvm -o - |
> FileCheck %s
> > +
> > +struct A {
> > +  A();
> > +  A(const A &);
> > +  ~A();
> > +};
> > +
> > +void test() {
> > +  __block A a;
> > +}
> > +
> > +// CHECK: [ DW_TAG_subprogram ] [line 10] [local] [def]
> [__Block_byref_object_copy_]
> > +// CHECK: [ DW_TAG_subprogram ] [line 10] [local] [def]
> [__Block_byref_object_dispose_]
> >
> > Added: cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp?rev=166676&view=auto
> >
> ==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp (added)
> > +++ cfe/trunk/test/CodeGenCXX/debug-info-global-ctor-dtor.cpp Thu Oct 25
> 05:18:50 2012
> > @@ -0,0 +1,27 @@
> > +// RUN: %clang_cc1 %s -g -fno-use-cxa-atexit -S -emit-llvm -o - \
> > +// RUN:     | FileCheck %s --check-prefix=CHECK-NOKEXT
> > +// RUN: %clang_cc1 %s -g -fno-use-cxa-atexit -fapple-kext -S -emit-llvm
> -o - \
> > +// RUN:     | FileCheck %s --check-prefix=CHECK-KEXT
> > +
> > +class A {
> > + public:
> > +  A() {}
> > +  virtual ~A() {}
> > +};
> > +
> > +A glob;
> > +A array[2];
> > +
> > +void foo() {
> > +  static A stat;
> > +}
> > +
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 12] [local] [def]
> [__cxx_global_var_init]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 12] [local] [def]
> [__dtor_glob]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 13] [local] [def]
> [__cxx_global_var_init1]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 13] [local] [def]
> [__cxx_global_array_dtor]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 13] [local] [def] [__dtor_]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line 16] [local] [def]
> [__dtor__ZZ3foovE4stat]
> > +// CHECK-NOKEXT: [ DW_TAG_subprogram ] [line {{.*}}] [local] [def]
> [_GLOBAL__I_a]
> > +
> > +// CHECK-KEXT: [ DW_TAG_subprogram ] [line {{.*}}] [local] [def]
> [_GLOBAL__D_a]
> >
> > Added: cfe/trunk/test/CodeGenCXX/debug-info-thunk.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-thunk.cpp?rev=166676&view=auto
> >
> ==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/debug-info-thunk.cpp (added)
> > +++ cfe/trunk/test/CodeGenCXX/debug-info-thunk.cpp Thu Oct 25 05:18:50
> 2012
> > @@ -0,0 +1,17 @@
> > +// RUN: %clang_cc1 %s -g -S -emit-llvm -o - | FileCheck %s
> > +
> > +struct A {
> > +  virtual void f();
> > +};
> > +
> > +struct B {
> > +  virtual void f();
> > +};
> > +
> > +struct C : A, B {
> > +  virtual void f();
> > +};
> > +
> > +void C::f() { }
> > +
> > +// CHECK: [ DW_TAG_subprogram ] [line 15] [def] [_ZThn8_N1C1fEv]
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121026/bc485790/attachment.html>


More information about the cfe-commits mailing list