This seems a little curious, so you'll have code like this:

  decl foo
  module
    def bar
       member foo pointer (references the declaration of foo outside the
module, in the CU?)

Why is that preferable to DWARF that looks more like the AST where the
declaration of foo appears in the first module that references it, rather
than, in a curiously circular situation, in the CU that references the
module?


On Fri, Oct 2, 2015 at 10:36 AM, Adrian Prantl via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: adrian
> Date: Fri Oct  2 12:36:14 2015
> New Revision: 249157
>
> URL: http://llvm.org/viewvc/llvm-project?rev=249157&view=rev
> Log:
> Module debugging: Don't emit forward declarations in module scopes.
> A forward declaration inside a module header does not belong to the module.
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/test/Modules/Inputs/DebugObjC.h
>     cfe/trunk/test/Modules/ModuleDebugInfo.m
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=249157&r1=249156&r2=249157&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Oct  2 12:36:14 2015
> @@ -2172,6 +2172,9 @@ ObjCInterfaceDecl *CGDebugInfo::getObjCI
>  }
>
>  llvm::DIModule *CGDebugInfo::getParentModuleOrNull(const Decl *D) {
> +  // A forward declaration inside a module header does not belong to the
> module.
> +  if (isa<RecordDecl>(D) && !cast<RecordDecl>(D)->getDefinition())
> +    return nullptr;
>    if (DebugTypeExtRefs && D->isFromASTFile()) {
>      // Record a reference to an imported clang module or precompiled
> header.
>      auto *Reader = CGM.getContext().getExternalSource();
>
> Modified: cfe/trunk/test/Modules/Inputs/DebugObjC.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/DebugObjC.h?rev=249157&r1=249156&r2=249157&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Modules/Inputs/DebugObjC.h (original)
> +++ cfe/trunk/test/Modules/Inputs/DebugObjC.h Fri Oct  2 12:36:14 2015
> @@ -5,6 +5,7 @@
>  }
>  + classMethod;
>  - instanceMethodWithInt:(int)i;
> +- (struct OpaqueData*) getSomethingOpaque;
>  @property int property;
>  @end
>
>
> Modified: cfe/trunk/test/Modules/ModuleDebugInfo.m
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.m?rev=249157&r1=249156&r2=249157&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Modules/ModuleDebugInfo.m (original)
> +++ cfe/trunk/test/Modules/ModuleDebugInfo.m Fri Oct  2 12:36:14 2015
> @@ -41,3 +41,6 @@
>  // MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type,
>  // MODULE-CHECK-SAME:             name: "ObjCClass",
>  // MODULE-CHECK-SAME:             scope: ![[MODULE]],
> +
> +// The forward declaration should not be in the module scope.
> +// MODULE-CHECK: !DICompositeType(tag: DW_TAG_structure_type, name:
> "OpaqueData", file
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to