[llvm-commits] [llvm] r83010 - /llvm/trunk/lib/VMCore/AsmWriter.cpp

Jeffrey Yasskin jyasskin at google.com
Tue Oct 6 17:44:01 PDT 2009


This patch assumes that the Module* parameter to AssemblyWriter() is
non-null, but Value::print() in this file can pass NULL. This crashes if you
run `opt -instcombine -debug-only=instcombine` on any input where
instcombine will replace values. Let me know if you need a more precise test
case.

On Mon, Sep 28, 2009 at 1:56 PM, Devang Patel <dpatel at apple.com> wrote:

> Author: dpatel
> Date: Mon Sep 28 15:56:00 2009
> New Revision: 83010
>
> URL: http://llvm.org/viewvc/llvm-project?rev=83010&view=rev
> Log:
> Do not hardcode metadata names.
>
> Modified:
>    llvm/trunk/lib/VMCore/AsmWriter.cpp
>
> Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=83010&r1=83009&r2=83010&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
> +++ llvm/trunk/lib/VMCore/AsmWriter.cpp Mon Sep 28 15:56:00 2009
> @@ -1266,6 +1266,7 @@
>   TypePrinting TypePrinter;
>   AssemblyAnnotationWriter *AnnotationWriter;
>   std::vector<const Type*> NumberedTypes;
> +  DenseMap<unsigned, const char *> MDNames;
>
>  public:
>   inline AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
> @@ -1273,6 +1274,14 @@
>                         AssemblyAnnotationWriter *AAW)
>     : Out(o), Machine(Mac), TheModule(M), AnnotationWriter(AAW) {
>     AddModuleTypesToPrinter(TypePrinter, NumberedTypes, M);
> +    // FIXME: Provide MDPrinter
> +    Metadata &TheMetadata = M->getContext().getMetadata();
> +    const StringMap<unsigned> *Names = TheMetadata.getHandlerNames();
> +    for (StringMapConstIterator<unsigned> I = Names->begin(),
> +           E = Names->end(); I != E; ++I) {
> +      const StringMapEntry<unsigned> &Entry = *I;
> +      MDNames[I->second] = Entry.getKeyData();
> +    }
>   }
>
>   void write(const Module *M) { printModule(M); }
> @@ -1991,11 +2000,16 @@
>     Out << ", align " << cast<StoreInst>(I).getAlignment();
>   }
>
> -  // Print DebugInfo
> +  // Print Metadata info
>   Metadata &TheMetadata = I.getContext().getMetadata();
> -  unsigned MDDbgKind = TheMetadata.getMDKind("dbg");
> -  if (const MDNode *Dbg = TheMetadata.getMD(MDDbgKind, &I))
> -    Out << ", dbg !" << Machine.getMetadataSlot(Dbg);
> +  const Metadata::MDMapTy *MDMap = TheMetadata.getMDs(&I);
> +  if (MDMap)
> +    for (Metadata::MDMapTy::const_iterator MI = MDMap->begin(),
> +           ME = MDMap->end(); MI != ME; ++MI)
> +      if (const MDNode *MD = dyn_cast_or_null<MDNode>(MI->second))
> +        Out << ", " << MDNames[MI->first]
> +            << " !" << Machine.getMetadataSlot(MD);
> +
>   printInfoComment(I);
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20091006/6bb9bde5/attachment.html>


More information about the llvm-commits mailing list