[cfe-commits] r98083 - in /cfe/trunk: lib/CodeGen/CGDebugInfo.cpp lib/CodeGen/CGDebugInfo.h test/CodeGenCXX/2010-03-09-AnonAggregate.cpp

Chris Lattner clattner at apple.com
Tue Mar 9 15:10:43 PST 2010


On Mar 9, 2010, at 1:32 PM, Devang Patel wrote:

> Author: dpatel
> Date: Tue Mar  9 15:32:27 2010
> New Revision: 98083
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=98083&view=rev
> Log:
> More then one anonymous aggregates on one line creates chaos when MDNode uniquness is combined with RAUW operation. Right solution is to avoid using RAUW.

Hi Devang,
 
Please don't use alloca, use SmallString/SmallVector instead.  For this specific case, it is probably better for DebugFactory.CreateCompositeType to take a twine, which would be an even cleaner way to do this.

-Chris

> 
> This fixes PR 6554.
> 
> Added:
>    cfe/trunk/test/CodeGenCXX/2010-03-09-AnonAggregate.cpp
> 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=98083&r1=98082&r2=98083&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Mar  9 15:32:27 2010
> @@ -37,7 +37,7 @@
> 
> CGDebugInfo::CGDebugInfo(CodeGenModule &CGM)
>   : CGM(CGM), DebugFactory(CGM.getModule()),
> -    BlockLiteralGenericSet(false) {
> +    FwdDeclCount(0), BlockLiteralGenericSet(false) {
>   CreateCompileUnit();
> }
> 
> @@ -774,12 +774,12 @@
> 
>   // A RD->getName() is not unique. However, the debug info descriptors 
>   // are uniqued so use type name to ensure uniquness.
> -  std::string STy = QualType(Ty, 0).getAsString();
> +  char *FwdDeclName = (char *)alloca(65);
> +  sprintf(FwdDeclName, "fwd.type.%d", FwdDeclCount++);
>   llvm::DIDescriptor FDContext = 
>     getContextDescriptor(dyn_cast<Decl>(RD->getDeclContext()), Unit);
>   llvm::DICompositeType FwdDecl =
> -    DebugFactory.CreateCompositeType(Tag, FDContext,
> -                                     STy.c_str(),
> +    DebugFactory.CreateCompositeType(Tag, FDContext, FwdDeclName,
>                                      DefUnit, Line, 0, 0, 0, 0,
>                                      llvm::DIType(), llvm::DIArray());
> 
> 
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=98083&r1=98082&r2=98083&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Tue Mar  9 15:32:27 2010
> @@ -45,11 +45,11 @@
>   CodeGenModule &CGM;
>   llvm::DIFactory DebugFactory;
>   llvm::DICompileUnit TheCU;
> -
>   SourceLocation CurLoc, PrevLoc;
> -  
>   llvm::DIType VTablePtrType;
> -
> +  /// FwdDeclCount - This counter is used to ensure unique names for forward
> +  /// record decls.
> +  unsigned FwdDeclCount;
> 
>   /// TypeCache - Cache of previously constructed Types.
>   // FIXME: Eliminate this map.  Be careful of iterator invalidation.
> 
> Added: cfe/trunk/test/CodeGenCXX/2010-03-09-AnonAggregate.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/2010-03-09-AnonAggregate.cpp?rev=98083&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/2010-03-09-AnonAggregate.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/2010-03-09-AnonAggregate.cpp Tue Mar  9 15:32:27 2010
> @@ -0,0 +1,12 @@
> +// RUN: %clang_cc1 -g -S -o %t %s
> +// PR: 6554
> +// More then one anonymous aggregates on one line creates chaos when MDNode uniquness is 
> +// combined with RAUW operation.
> +// This test case causes crashes if malloc is configured to trip buffer overruns.
> +class MO {
> +
> +  union {       struct {       union {    int BA;       } Val;       int Offset;     } OffsetedInfo;   } Contents; 
> +
> +};
> +
> +class MO m;
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list