<p dir="ltr">Thanks for tracking this down and sorry for the inconvenience, I noticed the issue last night while staging my final patch but wasn't able yo bisect it down to the right patch fast enough.</p>
<div class="gmail_quote">On Aug 16, 2013 3:38 AM, "Evgeniy Stepanov" <<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I've reverted this in r188539 to un-break the build.<br>
<br>
On Fri, Aug 16, 2013 at 12:40 PM, Evgeniy Stepanov<br>
<<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> this broke linux cmake bootstrap build with<br>
> -DCMAKE_BUILD_TYPE=Release<br>
> -DLLVM_ENABLE_ASSERTIONS=ON<br>
> -DLLVM_ENABLE_WERROR=ON<br>
><br>
> Reproducer attached.<br>
><br>
> $ bin/clang -g -c 1.ii<br>
> A static data member declaration should be available at this point<br>
> UNREACHABLE executed at ../tools/clang/lib/CodeGen/CGDebugInfo.cpp:3018!<br>
><br>
><br>
> On Fri, Aug 16, 2013 at 2:30 AM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
>> Author: dblaikie<br>
>> Date: Thu Aug 15 17:30:23 2013<br>
>> New Revision: 188498<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=188498&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=188498&view=rev</a><br>
>> Log:<br>
>> DebugInfo: Split out the implementation of getStaticDataMemberDeclaration for future use<br>
>><br>
>> Modified:<br>
>>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
>>     cfe/trunk/lib/CodeGen/CGDebugInfo.h<br>
>><br>
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=188498&r1=188497&r2=188498&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=188498&r1=188497&r2=188498&view=diff</a><br>

>> ==============================================================================<br>
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)<br>
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Aug 15 17:30:23 2013<br>
>> @@ -2998,19 +2998,25 @@ void CGDebugInfo::EmitDeclareOfBlockLite<br>
>>    DbgDecl->setDebugLoc(llvm::DebugLoc::get(line, column, scope));<br>
>>  }<br>
>><br>
>> -/// getStaticDataMemberDeclaration - If D is an out-of-class definition of<br>
>> -/// a static data member of a class, find its corresponding in-class<br>
>> -/// declaration.<br>
>> -llvm::DIDerivedType CGDebugInfo::getStaticDataMemberDeclaration(const VarDecl *D) {<br>
>> -  if (D->isStaticDataMember()) {<br>
>> -    llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator<br>
>> -      MI = StaticDataMemberCache.find(D->getCanonicalDecl());<br>
>> -    if (MI != StaticDataMemberCache.end())<br>
>> -      // Verify the info still exists.<br>
>> -      if (llvm::Value *V = MI->second)<br>
>> -        return llvm::DIDerivedType(cast<llvm::MDNode>(V));<br>
>> -  }<br>
>> -  return llvm::DIDerivedType();<br>
>> +/// If D is an out-of-class definition of a static data member of a class, find<br>
>> +/// its corresponding in-class declaration.<br>
>> +llvm::DIDerivedType<br>
>> +CGDebugInfo::getStaticDataMemberDeclarationOrNull(const VarDecl *D) {<br>
>> +  if (!D->isStaticDataMember())<br>
>> +    return llvm::DIDerivedType();<br>
>> +  return getStaticDataMemberDeclaration(D);<br>
>> +}<br>
>> +<br>
>> +llvm::DIDerivedType<br>
>> +CGDebugInfo::getStaticDataMemberDeclaration(const VarDecl *D) {<br>
>> +  llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator<br>
>> +    MI = StaticDataMemberCache.find(D->getCanonicalDecl());<br>
>> +  if (MI != StaticDataMemberCache.end())<br>
>> +    // Verify the info still exists.<br>
>> +    if (llvm::Value *V = MI->second)<br>
>> +      return llvm::DIDerivedType(cast<llvm::MDNode>(V));<br>
>> +  llvm_unreachable(<br>
>> +      "A static data member declaration should be available at this point");<br>
>>  }<br>
>><br>
>>  /// EmitGlobalVariable - Emit information about a global variable.<br>
>> @@ -3042,11 +3048,9 @@ void CGDebugInfo::EmitGlobalVariable(llv<br>
>>      LinkageName = StringRef();<br>
>>    llvm::DIDescriptor DContext =<br>
>>      getContextDescriptor(dyn_cast<Decl>(D->getDeclContext()));<br>
>> -  llvm::DIGlobalVariable GV =<br>
>> -      DBuilder.createStaticVariable(DContext, DeclName, LinkageName, Unit,<br>
>> -                                    LineNo, getOrCreateType(T, Unit),<br>
>> -                                    Var->hasInternalLinkage(), Var,<br>
>> -                                    getStaticDataMemberDeclaration(D));<br>
>> +  llvm::DIGlobalVariable GV = DBuilder.createStaticVariable(<br>
>> +      DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit),<br>
>> +      Var->hasInternalLinkage(), Var, getStaticDataMemberDeclarationOrNull(D));<br>
>>    DeclCache.insert(std::make_pair(D->getCanonicalDecl(), llvm::WeakVH(GV)));<br>
>>  }<br>
>><br>
>> @@ -3094,7 +3098,7 @@ void CGDebugInfo::EmitGlobalVariable(con<br>
>>      return;<br>
>>    llvm::DIGlobalVariable GV = DBuilder.createStaticVariable(<br>
>>        Unit, Name, Name, Unit, getLineNumber(VD->getLocation()), Ty, true, Init,<br>
>> -      getStaticDataMemberDeclaration(cast<VarDecl>(VD)));<br>
>> +      getStaticDataMemberDeclarationOrNull(cast<VarDecl>(VD)));<br>
>>    DeclCache.insert(std::make_pair(VD->getCanonicalDecl(), llvm::WeakVH(GV)));<br>
>>  }<br>
>><br>
>><br>
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=188498&r1=188497&r2=188498&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=188498&r1=188497&r2=188498&view=diff</a><br>

>> ==============================================================================<br>
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)<br>
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Thu Aug 15 17:30:23 2013<br>
>> @@ -357,6 +357,7 @@ private:<br>
>>    /// getStaticDataMemberDeclaration - Return debug info descriptor to<br>
>>    /// describe in-class static data member declaration for the given<br>
>>    /// out-of-class definition.<br>
>> +  llvm::DIDerivedType getStaticDataMemberDeclarationOrNull(const VarDecl *D);<br>
>>    llvm::DIDerivedType getStaticDataMemberDeclaration(const VarDecl *D);<br>
>><br>
>>    /// getFunctionName - Get function name for the given FunctionDecl. If the<br>
>><br>
>><br>
>> _______________________________________________<br>
>> cfe-commits mailing list<br>
>> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>