Hi,
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.
If you actually read the code for libcxx.py:

        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

"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.

On your side, there are several possibilities:
(a) wait for the logging to be in, and then repeat the test case and send the 
new log files
(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
(c) compile a new clang from TOT and retry using the updated compiler

Thanks,
Enrico Granata
✉ egranata@.com
✆ (four oh eight) 862-7683


On Mar 30, 2012, at 2:54 AM, Filipe Cabecinhas wrote:

> Hi,
> 
> Attahced is the output of the test ran in verbose mode.
> 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).
> 
> 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?).  
> 
> 
>  Filipe
> 
> 
> On Thursday, March 29, 2012 at 6:31 PM, Enrico Granata wrote:
> 
>> Hi,
>> 
>> a good first step is for you to run the test in verbose mode and attach the 
>> output.
>> You can also try to manually repeat the test case behavior and seeing what 
>> you get.
>> 
>> Moving from there should not be too complicated.
>> 
>> 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.
>> 
>> Thanks.
>> 
>> Enrico Granata
>> ✉ egranata@.com
>> ✆ (four oh eight) 862-7683

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to