<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Filipe,<div>glad to hear it works on a recent clang.</div><div>My bet is that the culprit is actually the compiler, not lldb.</div><div><br></div><div>The way the data formatter works is by accessing the type information for a specific child and extracting type information for the map out of it. This is what the DWARF emitted by old clang has to say about the type we use:</div><div><div><font class="Apple-style-span" face="'Courier New'">0x0000bff4:             TAG_class_type [35]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_name( "__tree_node" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_declaration( 0x01 )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000bffa:             TAG_class_type [35]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_name( "__tree_node_base" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_declaration( 0x01 )</font></div></div><div><br></div><div>Not much. OTOH, the newer clang:</div><div><div><font class="Apple-style-span" face="'Courier New'">0x0000c6cc:             TAG_class_type [13] *</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_name( "__tree_node<std::__1::pair<int, int>, void *>" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_byte_size( 0x28 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_decl_file( "/usr/lib/c++/v1/__tree" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_decl_line( 595 )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c6d5:                 TAG_inheritance [31]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_type( {0x00009b4a} ( __tree_node_base<void *> ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_data_member_location( +0 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_accessibility( DW_ACCESS_public )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'"><b>0x0000c6de</b>:                 TAG_typedef [14]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_type( {<b>0x0000d9bd</b>} ( pair<int, int> ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_name( "value_type" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_file( "/usr/lib/c++/v1/__tree" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_line( 600 )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c6ea:                 TAG_member [15]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_name( "__value_" ) <---- this is what we use, and the type information is good enough</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_type( {<b>0x0000c6de</b>} ( value_type ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_file( "/usr/lib/c++/v1/__tree" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_line( 602 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_data_member_location( +28 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_accessibility( DW_ACCESS_public )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c6fa:                 TAG_subprogram [17] *</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_name( "__tree_node" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_file( "/usr/lib/c++/v1/__tree" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_decl_line( 611 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_declaration( 0x01 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_external( 0x01 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_accessibility( DW_ACCESS_public )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_explicit( 0x01 )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c706:                     TAG_formal_parameter [8]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                                 AT_type( {0x00016c30} ( __tree_node<std::__1::pair<int, int>, void *>* ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                                 AT_artificial( 0x01 )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c70c:                     TAG_formal_parameter [18]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                                 AT_type( {0x00016c3a} ( const value_type& ) )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c711:                     NULL</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c712:                 TAG_template_type_parameter [10]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_type( {0x0000d9bd} ( pair<int, int> ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_name( "_Tp" )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c71b:                 TAG_template_type_parameter [10]  </font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_type( {0x0000d646} ( * ) )</font></div><div><font class="Apple-style-span" face="'Courier New'">                             AT_name( "_VoidPtr" )</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">0x0000c724:                 NULL</font></div></div><div><br></div><div>The type information for __value_ refers to:</div><div><div><font class="Apple-style-span" face="'Courier New'"><b>0x0000d9bd</b>:             TAG_class_type [6] *</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_name( "pair<int, int>" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_byte_size( 0x08 )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_decl_file( "/usr/lib/c++/v1/utility" )</font></div><div><font class="Apple-style-span" face="'Courier New'">                         AT_decl_line( 212 )</font></div></div><div><br></div><div>which is the right type, and hence the test works :-)</div><div><br></div><div>Without type information there is not much that we can do. We could, of course, try and make up the type manually by string concatenation - that is done in the libstdcpp map formatter, but this latter approach is much safer when it works. If you look into the other formatter, you'll see we need to play some tricks to keep things working:</div><div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">       </span># we need this function as a temporary workaround for <a href="rdar://problem/10801549">rdar://problem/10801549</a></font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre"> </span># which prevents us from extracting the std::pair<K,V> SBType out of the template</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">   </span># arguments for _Rep_Type _M_t in the map itself - because we have to make up the</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre"> </span># typename and then find it, we may hit the situation were std::string has multiple</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">       </span># names but only one is actually referenced in the debug information. hence, we need</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">      </span># to replace the longer versions of std::string with the shorter one in order to be able</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">  </span># to find the type name</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">   </span>def fixup_class_name(self, class_name):</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">           </span>logger = Logger.Logger()</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">          </span>if class_name == 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >':</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>return 'std::basic_string<char>',True</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">               </span>if class_name == 'basic_string<char, std::char_traits<char>, std::allocator<char> >':</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                   </span>return 'std::basic_string<char>',True</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">               </span>if class_name == 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >':</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>return 'std::basic_string<char>',True</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">               </span>if class_name == 'basic_string<char, std::char_traits<char>, std::allocator<char> >':</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                   </span>return 'std::basic_string<char>',True</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">               </span>return class_name,False</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">       </span>def update(self):</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">         </span>logger = Logger.Logger()</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">          </span>try:</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>self.count = None</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                 </span># we will set this to True if we find out that discovering a node in the map takes more steps than the overall size of the RB tree</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                        </span># if this gets set to True, then we will merrily return None for any child from that moment on</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                    </span>self.garbage = False</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>self.Mt = self.valobj.GetChildMemberWithName('_M_t')</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>self.Mimpl = self.Mt.GetChildMemberWithName('_M_impl')</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                    </span>self.Mheader = self.Mimpl.GetChildMemberWithName('_M_header')</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                     </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>map_type = self.valobj.GetType()</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>if map_type.IsReferenceType():</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                            </span>logger >> "Dereferencing type"</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                            </span>map_type = map_type.GetDereferencedType()</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                 </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>map_arg_0 = str(map_type.GetTemplateArgumentType(0).GetName())</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                    </span>map_arg_1 = str(map_type.GetTemplateArgumentType(1).GetName())</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                    </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>logger >> "map has args " + str(map_arg_0) + " and " + str(map_arg_1)</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                   </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>map_arg_0,fixed_0 = self.fixup_class_name(map_arg_0)</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span>map_arg_1,fixed_1 = self.fixup_class_name(map_arg_1)</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                      </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>logger >> "arg_0 has become: " + str(map_arg_0) + " (fixed: " + str(fixed_0) + ")"</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                    </span>logger >> "arg_1 has become: " + str(map_arg_1) + " (fixed: " + str(fixed_1) + ")"</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                    </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span># HACK: this is related to the above issue with the typename for std::string</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                      </span># being shortened by clang - the changes to typename display and searching to honor</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                       </span># namespaces make it so that we go looking for std::pair<const std::basic_string<char>, ...></font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span># but when we find a type for this, we then compare it against the fully-qualified</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                        </span># std::pair<const std::basic_string<char, std::char_traits... and of course fail</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                    </span># the way to bypass this problem is to avoid using the std:: prefix in this specific case</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                 </span>if fixed_0 or fixed_1:</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                            </span>map_arg_type = "pair<const " + map_arg_0 + ", " + map_arg_1</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                        </span>else:</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                             </span>map_arg_type = "std::pair<const " + map_arg_0 + ", " + map_arg_1</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                   </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>if map_arg_1[-1] == '>':</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                               </span>map_arg_type = map_arg_type + " >"</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                   </span>else:</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                             </span>map_arg_type = map_arg_type + ">"</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                    </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>logger >> "final contents datatype is: " + str(map_arg_type)</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                      </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>self.data_type = self.valobj.GetTarget().FindFirstType(map_arg_type)</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                      </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span>logger >> "and the SBType is: " + str(self.data_type)</font></div><div><span class="Apple-tab-span" style="white-space:pre"><font class="Apple-style-span" face="'Courier New'">                     </font></span></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                  </span># from libstdc++ implementation of _M_root for rbtree</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                     </span>self.Mroot = self.Mheader.GetChildMemberWithName('_M_parent')</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                     </span>self.data_size = self.data_type.GetByteSize()</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                     </span>self.skip_size = self.Mheader.GetType().GetByteSize()</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">             </span>except:</font></div><div><font class="Apple-style-span" face="'Courier New'"><span class="Apple-tab-span" style="white-space:pre">                   </span>pass</font></div></div><div><br></div><div>This is way more complicated than desirable. There should be ways to mark the test as an expected failure for older-than-X clang versions. Maybe that is the best way to tackle this issue.</div><div><br></div><div>Thanks.</div><div><br><div apple-content-edited="true">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="orphans: 2; text-align: -webkit-auto; text-indent: 0px; widows: 2; -webkit-text-decorations-in-effect: none; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; color: rgb(0, 0, 0); "><i>Enrico Granata</i></div><div style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">✉ egranata@<font class="Apple-style-span" color="#ff230e"></font>.com</div><div>✆ (four oh eight) 862-7683</div></div></span></div></div></div></div>
</div>
<br><div><div>On Mar 30, 2012, at 8:23 AM, Filipe Cabecinhas wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Enrico,<br><br>The old compiler was the culprit, it seems. With clang ToT the test passes.<br>I'm sending the a.out and its dSYM file anyway since this may be a bug in lldb anyway (it doesn't work with the current Mac OS X provided clang).<br><br>Thanks,  <br><br>  Filipe<br><br><br>On Friday, March 30, 2012 at 3:26 PM, Enrico Granata wrote:<br><br><blockquote type="cite">Hi,<br></blockquote><blockquote type="cite">The 'foo' is indeed a left-over debugging printout. I usually remove them before committing the files, but every once in a while one remains. I will replace it with a Logger call later today.<br></blockquote><blockquote type="cite">If you actually read the code for libcxx.py:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">def get_child_at_index(self,index): logger = Logger.Logger() if index < 0: return None if index >= self.num_children(): return None; if self.garbage: return None try: iterator = stdmap_iterator(self.root_node,max_count=self.num_children()) # the debug info for libc++ std::map is such that __begin_node_ has a very nice and useful type # out of which we can grab the information we need - every other node has a less informative # type which omits all value information and only contains housekeeping information for the RB tree # hence, we need to know if we are at a node != 0, so that we can still get at the data need_to_skip = (index > 0) current = iterator.advance(index) if current == None: self.garbage = True return None if self.get_data_type(): if not(need_to_skip): current = current.Dereference() obj = current.GetChildMemberWithName('__value_') obj_data = obj.GetData() self.get_value_offset(current) # make sure we have a valid offset for the next items # we do not return __value_ because then we would end up with a child named # __value_ instead of [0] return self.valobj.CreateValueFromData('[' + str(index) + ']',obj_data,self.data_type) else: # FIXME we need to have accessed item 0 before accessing any other item! if self.skip_size == None: return None return current.CreateChildAtOffset('[' + str(index) + ']',self.skip_size,self.data_type) else: print "foo" return None except Exception as err: print err return None  <br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">"foo" is printed when self.get_data_type() does not work. On my side, the right thing to do is add a fair amount of logging to better diagnose this and similar scenarios.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">On your side, there are several possibilities:<br></blockquote><blockquote type="cite">(a) wait for the logging to be in, and then repeat the test case and send the new log files<br></blockquote><blockquote type="cite">(b) send the a.out and associated dSYM and let's check if they look correct or the older compiler is doing something wrong with the debug info<br></blockquote><blockquote type="cite">(c) compile a new clang from TOT and retry using the updated compiler<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Thanks,<br></blockquote><blockquote type="cite">Enrico Granata<br></blockquote><blockquote type="cite">✉ egranata@.com<br></blockquote><blockquote type="cite">✆ (four oh eight) 862-7683<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">On Mar 30, 2012, at 2:54 AM, Filipe Cabecinhas wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Hi,<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Attahced is the output of the test ran in verbose mode.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">There's a very weird 'foo' that is shown after I enabled logging in the test (I enables verbose formatter logging right before the instruction that fails).<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">That print comes from stdmap_SynthProvider.get_child_at_index(), on line 546 of the Python/libcxx.py file. It seems like some kind of error, maybe you know what it's about (Something unfinished in that file?).  <br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Filipe<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">On Thursday, March 29, 2012 at 6:31 PM, Enrico Granata wrote:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Hi,<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">a good first step is for you to run the test in verbose mode and attach the output.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">You can also try to manually repeat the test case behavior and seeing what you get.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Moving from there should not be too complicated.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">As for tool versions, I am using a previous version of swig because of licensing issues. I also have a more recent clang based off LLVM 3.1 svn. I am not sure why that would be the case but given that the test case at fault here is related to libc++ I would guess that the build of libc++ has something to do with it. However, we are on the same OSX version.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Thanks.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Enrico Granata<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">✉ egranata@.com<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">✆ (four oh eight) 862-7683<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><br></blockquote><br><br><span><a.out.dSYM.zip></span><span><a.out></span></div></blockquote></div><br></div></body></html>