<div dir="ltr">It's okay. Just make sure they didn't restore the repos from backups (and your commit is still there), when the “ok to commit” email gets here (I asked on IRC for them to send it to this list too).<div>
<br></div><div style>They shouldn't need to restore, but it happens.</div><div style><br></div><div style>Thanks,</div><div style><br></div><div style>  Filipe</div></div><div class="gmail_extra"><br clear="all"><div>
  F<br></div>
<br><br><div class="gmail_quote">On Mon, Feb 4, 2013 at 4:04 PM, Enrico Granata <span dir="ltr"><<a href="mailto:egranata@apple.com" target="_blank">egranata@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">Thanks for the heads-up. That explains the slower-than-average delay before my changes went through.<div>It is unfortunate that we did not get the message on lldb-dev. I guess it's time to enroll in the general llvm-dev now :)</div>
<div><span class="HOEnZb"><font color="#888888"><br><div>
<div><div style="border-collapse:separate;border-spacing:0px"><i>Enrico Granata</i></div><div style="border-collapse:separate;border-spacing:0px">✉ egranata@<font color="#ff230e"></font>.com</div><div>✆ <a href="tel:%28408%29%20972-7683" value="+14089727683" target="_blank">(408) 972-7683</a></div>
</div>
</div></font></span><div><div class="h5">
<br><div><div>On Feb 4, 2013, at 3:59 PM, Filipe Cabecinhas <<a href="mailto:filcab@gmail.com" target="_blank">filcab@gmail.com</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">Hi all,<div><br></div><div>
Just an FYI: the server that contains the llvm project repositories is going through an upgrade.</div><div>Everyone was asked to not commit anything until further notice (if a problem occurs, they'll have to restore from backups and will lose today's commits).</div>

<div><br></div><div>Warning on llvm-dev: <a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-February/059018.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-February/059018.html</a></div><div>
<br></div><div>Let's hope you don't have to repeat your commits :-)</div><div><br></div><div>Regards,</div><div><br></div><div>  Filipe</div><div><br></div></div><div class="gmail_extra">
<br clear="all"><div>  F<br></div>
<br><br><div class="gmail_quote">On Mon, Feb 4, 2013 at 2:54 PM, Enrico Granata <span dir="ltr"><<a href="mailto:egranata@apple.com" target="_blank">egranata@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Author: enrico<br>
Date: Mon Feb  4 16:54:42 2013<br>
New Revision: 174333<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=174333&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=174333&view=rev</a><br>
Log:<br>
<<a>rdar://problem/12953018</a>><br>
<br>
Synthetic children and summary for std::vector<bool> (for both libcxx and libstdcpp).<br>
std::vector<bool> is a special case and is custom-implemented to be a vector of bits, which means we failed to handle it with the standard std::vector<T> formatter.<br>
This checkin provides custom formatters that work correctly<br>
<br>
<br>
Added:<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py<br>
    lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp<br>
Modified:<br>
    lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h<br>
    lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp<br>
    lldb/trunk/source/DataFormatters/FormatManager.cpp<br>
<br>
Modified: lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h?rev=174333&r1=174332&r2=174333&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h?rev=174333&r1=174332&r2=174333&view=diff</a><br>


==============================================================================<br>
--- lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h (original)<br>
+++ lldb/trunk/include/lldb/DataFormatters/CXXFormatterFunctions.h Mon Feb  4 16:54:42 2013<br>
@@ -15,6 +15,7 @@<br>
<br>
 #include "lldb/Core/ConstString.h"<br>
 #include "lldb/DataFormatters/FormatClasses.h"<br>
+#include "lldb/Target/Target.h"<br>
<br>
 #include "clang/AST/ASTContext.h"<br>
<br>
@@ -348,6 +349,69 @@ namespace lldb_private {<br>
<br>
         SyntheticChildrenFrontEnd* NSDictionarySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);<br>
<br>
+        class LibcxxVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd<br>
+        {<br>
+        public:<br>
+            LibcxxVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);<br>
+<br>
+            virtual size_t<br>
+            CalculateNumChildren ();<br>
+<br>
+            virtual lldb::ValueObjectSP<br>
+            GetChildAtIndex (size_t idx);<br>
+<br>
+            virtual bool<br>
+            Update();<br>
+<br>
+            virtual bool<br>
+            MightHaveChildren ();<br>
+<br>
+            virtual size_t<br>
+            GetIndexOfChildWithName (const ConstString &name);<br>
+<br>
+            virtual<br>
+            ~LibcxxVectorBoolSyntheticFrontEnd ();<br>
+        private:<br>
+            ExecutionContextRef m_exe_ctx_ref;<br>
+            uint64_t m_count;<br>
+            lldb::addr_t m_base_data_address;<br>
+            EvaluateExpressionOptions m_options;<br>
+        };<br>
+<br>
+        SyntheticChildrenFrontEnd* LibcxxVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);<br>
+<br>
+        class LibstdcppVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd<br>
+        {<br>
+        public:<br>
+            LibstdcppVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);<br>
+<br>
+            virtual size_t<br>
+            CalculateNumChildren ();<br>
+<br>
+            virtual lldb::ValueObjectSP<br>
+            GetChildAtIndex (size_t idx);<br>
+<br>
+            virtual bool<br>
+            Update();<br>
+<br>
+            virtual bool<br>
+            MightHaveChildren ();<br>
+<br>
+            virtual size_t<br>
+            GetIndexOfChildWithName (const ConstString &name);<br>
+<br>
+            virtual<br>
+            ~LibstdcppVectorBoolSyntheticFrontEnd ();<br>
+        private:<br>
+            ExecutionContextRef m_exe_ctx_ref;<br>
+            uint64_t m_count;<br>
+            lldb::addr_t m_base_data_address;<br>
+            EvaluateExpressionOptions m_options;<br>
+        };<br>
+<br>
+        SyntheticChildrenFrontEnd* LibstdcppVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);<br>
+<br>
+<br>
     }<br>
 }<br>
<br>
<br>
Modified: lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp?rev=174333&r1=174332&r2=174333&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp?rev=174333&r1=174332&r2=174333&view=diff</a><br>


==============================================================================<br>
--- lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp (original)<br>
+++ lldb/trunk/source/DataFormatters/CXXFormatterFunctions.cpp Mon Feb  4 16:54:42 2013<br>
@@ -1787,6 +1787,322 @@ lldb_private::formatters::NSDictionaryMS<br>
     return dict_item.valobj_sp;<br>
 }<br>
<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::LibcxxVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :<br>
+    SyntheticChildrenFrontEnd(*valobj_sp.get()),<br>
+    m_exe_ctx_ref(),<br>
+    m_count(0),<br>
+    m_base_data_address(0),<br>
+    m_options()<br>
+    {<br>
+        if (valobj_sp)<br>
+            Update();<br>
+        m_options.SetCoerceToId(false)<br>
+                 .SetUnwindOnError(true)<br>
+                 .SetKeepInMemory(true)<br>
+                 .SetUseDynamic(lldb::eDynamicCanRunTarget);<br>
+    }<br>
+<br>
+size_t<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::CalculateNumChildren ()<br>
+{<br>
+    return m_count;<br>
+}<br>
+<br>
+lldb::ValueObjectSP<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::GetChildAtIndex (size_t idx)<br>
+{<br>
+    if (idx >= m_count)<br>
+        return ValueObjectSP();<br>
+    if (m_base_data_address == 0 || m_count == 0)<br>
+        return ValueObjectSP();<br>
+    size_t byte_idx = (idx >> 3); // divide by 8 to get byte index<br>
+    size_t bit_index = (idx & 7); // efficient idx % 8 for bit index<br>
+    lldb::addr_t byte_location = m_base_data_address + byte_idx;<br>
+    ProcessSP process_sp(m_exe_ctx_ref.GetProcessSP());<br>
+    if (!process_sp)<br>
+        return ValueObjectSP();<br>
+    uint8_t byte = 0;<br>
+    uint8_t mask = 0;<br>
+    Error err;<br>
+    size_t bytes_read = process_sp->ReadMemory(byte_location, &byte, 1, err);<br>
+    if (err.Fail() || bytes_read == 0)<br>
+        return ValueObjectSP();<br>
+    switch (bit_index)<br>
+    {<br>
+        case 0:<br>
+            mask = 1; break;<br>
+        case 1:<br>
+            mask = 2; break;<br>
+        case 2:<br>
+            mask = 4; break;<br>
+        case 3:<br>
+            mask = 8; break;<br>
+        case 4:<br>
+            mask = 16; break;<br>
+        case 5:<br>
+            mask = 32; break;<br>
+        case 6:<br>
+            mask = 64; break;<br>
+        case 7:<br>
+            mask = 128; break;<br>
+        default:<br>
+            return ValueObjectSP();<br>
+    }<br>
+    bool bit_set = ((byte & mask) != 0);<br>
+    Target& target(process_sp->GetTarget());<br>
+    ValueObjectSP retval_sp;<br>
+    if (bit_set)<br>
+        target.EvaluateExpression("(bool)true", NULL, retval_sp);<br>
+    else<br>
+        target.EvaluateExpression("(bool)false", NULL, retval_sp);<br>
+    StreamString name; name.Printf("[%zu]",idx);<br>
+    if (retval_sp)<br>
+        retval_sp->SetName(ConstString(name.GetData()));<br>
+    return retval_sp;<br>
+}<br>
+<br>
+/*(std::__1::vector<std::__1::allocator<bool> >) vBool = {<br>
+    __begin_ = 0x00000001001000e0<br>
+    __size_ = 56<br>
+    __cap_alloc_ = {<br>
+        std::__1::__libcpp_compressed_pair_imp<unsigned long, std::__1::allocator<unsigned long> > = {<br>
+            __first_ = 1<br>
+        }<br>
+    }<br>
+}*/<br>
+<br>
+bool<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::Update()<br>
+{<br>
+    ValueObjectSP valobj_sp = m_backend.GetSP();<br>
+    if (!valobj_sp)<br>
+        return false;<br>
+    if (valobj_sp->IsDynamic())<br>
+        valobj_sp = valobj_sp->GetStaticValue();<br>
+    if (!valobj_sp)<br>
+        return false;<br>
+    m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();<br>
+    ValueObjectSP size_sp(valobj_sp->GetChildMemberWithName(ConstString("__size_"), true));<br>
+    if (!size_sp)<br>
+        return false;<br>
+    m_count = size_sp->GetValueAsUnsigned(0);<br>
+    if (!m_count)<br>
+        return true;<br>
+    ValueObjectSP begin_sp(valobj_sp->GetChildMemberWithName(ConstString("__begin_"), true));<br>
+    if (!begin_sp)<br>
+    {<br>
+        m_count = 0;<br>
+        return false;<br>
+    }<br>
+    m_base_data_address = begin_sp->GetValueAsUnsigned(0);<br>
+    if (!m_base_data_address)<br>
+    {<br>
+        m_count = 0;<br>
+        return false;<br>
+    }<br>
+    return true;<br>
+}<br>
+<br>
+bool<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::MightHaveChildren ()<br>
+{<br>
+    return true;<br>
+}<br>
+<br>
+size_t<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name)<br>
+{<br>
+    if (!m_count || !m_base_data_address)<br>
+        return UINT32_MAX;<br>
+    const char* item_name = name.GetCString();<br>
+    uint32_t idx = ExtractIndexFromString(item_name);<br>
+    if (idx < UINT32_MAX && idx >= CalculateNumChildren())<br>
+        return UINT32_MAX;<br>
+    return idx;<br>
+}<br>
+<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::~LibcxxVectorBoolSyntheticFrontEnd ()<br>
+{}<br>
+<br>
+SyntheticChildrenFrontEnd*<br>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp)<br>
+{<br>
+    if (!valobj_sp)<br>
+        return NULL;<br>
+    return (new LibcxxVectorBoolSyntheticFrontEnd(valobj_sp));<br>
+}<br>
+<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::LibstdcppVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :<br>
+SyntheticChildrenFrontEnd(*valobj_sp.get()),<br>
+m_exe_ctx_ref(),<br>
+m_count(0),<br>
+m_base_data_address(0),<br>
+m_options()<br>
+{<br>
+    if (valobj_sp)<br>
+        Update();<br>
+    m_options.SetCoerceToId(false)<br>
+    .SetUnwindOnError(true)<br>
+    .SetKeepInMemory(true)<br>
+    .SetUseDynamic(lldb::eDynamicCanRunTarget);<br>
+}<br>
+<br>
+size_t<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::CalculateNumChildren ()<br>
+{<br>
+    return m_count;<br>
+}<br>
+<br>
+lldb::ValueObjectSP<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::GetChildAtIndex (size_t idx)<br>
+{<br>
+    if (idx >= m_count)<br>
+        return ValueObjectSP();<br>
+    if (m_base_data_address == 0 || m_count == 0)<br>
+        return ValueObjectSP();<br>
+    size_t byte_idx = (idx >> 3); // divide by 8 to get byte index<br>
+    size_t bit_index = (idx & 7); // efficient idx % 8 for bit index<br>
+    lldb::addr_t byte_location = m_base_data_address + byte_idx;<br>
+    ProcessSP process_sp(m_exe_ctx_ref.GetProcessSP());<br>
+    if (!process_sp)<br>
+        return ValueObjectSP();<br>
+    uint8_t byte = 0;<br>
+    uint8_t mask = 0;<br>
+    Error err;<br>
+    size_t bytes_read = process_sp->ReadMemory(byte_location, &byte, 1, err);<br>
+    if (err.Fail() || bytes_read == 0)<br>
+        return ValueObjectSP();<br>
+    switch (bit_index)<br>
+    {<br>
+        case 0:<br>
+            mask = 1; break;<br>
+        case 1:<br>
+            mask = 2; break;<br>
+        case 2:<br>
+            mask = 4; break;<br>
+        case 3:<br>
+            mask = 8; break;<br>
+        case 4:<br>
+            mask = 16; break;<br>
+        case 5:<br>
+            mask = 32; break;<br>
+        case 6:<br>
+            mask = 64; break;<br>
+        case 7:<br>
+            mask = 128; break;<br>
+        default:<br>
+            return ValueObjectSP();<br>
+    }<br>
+    bool bit_set = ((byte & mask) != 0);<br>
+    Target& target(process_sp->GetTarget());<br>
+    ValueObjectSP retval_sp;<br>
+    if (bit_set)<br>
+        target.EvaluateExpression("(bool)true", NULL, retval_sp);<br>
+    else<br>
+        target.EvaluateExpression("(bool)false", NULL, retval_sp);<br>
+    StreamString name; name.Printf("[%zu]",idx);<br>
+    if (retval_sp)<br>
+        retval_sp->SetName(ConstString(name.GetData()));<br>
+    return retval_sp;<br>
+}<br>
+<br>
+/*((std::vector<std::allocator<bool> >) vBool = {<br>
+ (std::_Bvector_base<std::allocator<bool> >) std::_Bvector_base<std::allocator<bool> > = {<br>
+ (std::_Bvector_base<std::allocator<bool> >::_Bvector_impl) _M_impl = {<br>
+ (std::_Bit_iterator) _M_start = {<br>
+ (std::_Bit_iterator_base) std::_Bit_iterator_base = {<br>
+ (_Bit_type *) _M_p = 0x0016b160<br>
+ (unsigned int) _M_offset = 0<br>
+ }<br>
+ }<br>
+ (std::_Bit_iterator) _M_finish = {<br>
+ (std::_Bit_iterator_base) std::_Bit_iterator_base = {<br>
+ (_Bit_type *) _M_p = 0x0016b16c<br>
+ (unsigned int) _M_offset = 16<br>
+ }<br>
+ }<br>
+ (_Bit_type *) _M_end_of_storage = 0x0016b170<br>
+ }<br>
+ }<br>
+ }<br>
+*/<br>
+<br>
+bool<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::Update()<br>
+{<br>
+    ValueObjectSP valobj_sp = m_backend.GetSP();<br>
+    if (!valobj_sp)<br>
+        return false;<br>
+    if (valobj_sp->IsDynamic())<br>
+        valobj_sp = valobj_sp->GetStaticValue();<br>
+    if (!valobj_sp)<br>
+        return false;<br>
+    m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();<br>
+<br>
+    ValueObjectSP m_impl_sp(valobj_sp->GetChildMemberWithName(ConstString("_M_impl"), true));<br>
+    if (!m_impl_sp)<br>
+        return false;<br>
+<br>
+    ValueObjectSP m_start_sp(m_impl_sp->GetChildMemberWithName(ConstString("_M_start"), true));<br>
+    ValueObjectSP m_finish_sp(m_impl_sp->GetChildMemberWithName(ConstString("_M_finish"), true));<br>
+<br>
+    ValueObjectSP start_p_sp, finish_p_sp, finish_offset_sp;<br>
+<br>
+    if (!m_start_sp || !m_finish_sp)<br>
+        return false;<br>
+<br>
+    start_p_sp = m_start_sp->GetChildMemberWithName(ConstString("_M_p"), true);<br>
+    finish_p_sp = m_finish_sp->GetChildMemberWithName(ConstString("_M_p"), true);<br>
+    finish_offset_sp = m_finish_sp->GetChildMemberWithName(ConstString("_M_offset"), true);<br>
+<br>
+    if (!start_p_sp || !finish_offset_sp || !finish_p_sp)<br>
+        return false;<br>
+<br>
+    m_base_data_address = start_p_sp->GetValueAsUnsigned(0);<br>
+    if (!m_base_data_address)<br>
+        return false;<br>
+<br>
+    lldb::addr_t end_data_address(finish_p_sp->GetValueAsUnsigned(0));<br>
+    if (!end_data_address)<br>
+        return false;<br>
+<br>
+    if (end_data_address < m_base_data_address)<br>
+        return false;<br>
+    else<br>
+        m_count = finish_offset_sp->GetValueAsUnsigned(0) + (end_data_address-m_base_data_address)*8;<br>
+<br>
+    return true;<br>
+}<br>
+<br>
+bool<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::MightHaveChildren ()<br>
+{<br>
+    return true;<br>
+}<br>
+<br>
+size_t<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name)<br>
+{<br>
+    if (!m_count || !m_base_data_address)<br>
+        return UINT32_MAX;<br>
+    const char* item_name = name.GetCString();<br>
+    uint32_t idx = ExtractIndexFromString(item_name);<br>
+    if (idx < UINT32_MAX && idx >= CalculateNumChildren())<br>
+        return UINT32_MAX;<br>
+    return idx;<br>
+}<br>
+<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::~LibstdcppVectorBoolSyntheticFrontEnd ()<br>
+{}<br>
+<br>
+SyntheticChildrenFrontEnd*<br>
+lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp)<br>
+{<br>
+    if (!valobj_sp)<br>
+        return NULL;<br>
+    return (new LibstdcppVectorBoolSyntheticFrontEnd(valobj_sp));<br>
+}<br>
+<br>
 template bool<br>
 lldb_private::formatters::NSDictionarySummaryProvider<true> (ValueObject&, Stream&) ;<br>
<br>
<br>
Modified: lldb/trunk/source/DataFormatters/FormatManager.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=174333&r1=174332&r2=174333&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=174333&r1=174332&r2=174333&view=diff</a><br>


==============================================================================<br>
--- lldb/trunk/source/DataFormatters/FormatManager.cpp (original)<br>
+++ lldb/trunk/source/DataFormatters/FormatManager.cpp Mon Feb  4 16:54:42 2013<br>
@@ -561,6 +561,13 @@ FormatManager::LoadLibStdcppFormatters()<br>
     gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),<br>
                                                      TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,<br>
                                                                                                "size=${svar%#}")));<br>
+<br>
+    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),<br>
+                                                   TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));<br>
+<br>
+    gnu_category_sp->GetSyntheticNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),<br>
+                                                     SyntheticChildrenSP(new CXXSyntheticChildren(stl_synth_flags,"libc++ std::vector<bool> synthetic children",lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEndCreator)));<br>


+<br>
 #endif<br>
 }<br>
<br>
@@ -633,7 +640,10 @@ FormatManager::LoadLibcxxFormatters()<br>
<br>
     // this summary prevails on the regex std::vector<> because we do exact matches before regex ones<br>
     libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::vector<std::__1::allocator<bool> >"),<br>
-                                                   TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${var.__size_}")));<br>
+                                                   TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));<br>
+<br>
+    libcxx_category_sp->GetSyntheticNavigator()->Add(ConstString("std::__1::vector<std::__1::allocator<bool> >"),<br>
+                                                     SyntheticChildrenSP(new CXXSyntheticChildren(stl_synth_flags,"libc++ std::vector<bool> synthetic children",lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEndCreator)));<br>


<br>
 #endif<br>
 }<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/Makefile Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,8 @@<br>
+LEVEL = ../../../../../make<br>
+<br>
+CXX_SOURCES := main.cpp<br>
+<br>
+include $(LEVEL)/Makefile.rules<br>
+<br>
+CXXFLAGS += -stdlib=libc++ -O0<br>
+LDFLAGS += -stdlib=libc++<br>
\ No newline at end of file<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/TestDataFormatterLibcxxVBool.py Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,70 @@<br>
+"""<br>
+Test lldb data formatter subsystem.<br>
+"""<br>
+<br>
+import os, time<br>
+import unittest2<br>
+import lldb<br>
+from lldbtest import *<br>
+import lldbutil<br>
+<br>
+class LibcxxVBoolDataFormatterTestCase(TestBase):<br>
+<br>
+    mydir = os.path.join("functionalities", "data-formatter", "data-formatter-stl", "libcxx", "vbool")<br>
+<br>
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")<br>
+    @dsym_test<br>
+    def test_with_dsym_and_run_command(self):<br>
+        """Test data formatter commands."""<br>
+        self.buildDsym()<br>
+        self.data_formatter_commands()<br>
+<br>
+    @skipOnLinux # No standard locations for libc++ on Linux, so skip for now<br>
+    @dwarf_test<br>
+    def test_with_dwarf_and_run_command(self):<br>
+        """Test data formatter commands."""<br>
+        self.buildDwarf()<br>
+        self.data_formatter_commands()<br>
+<br>
+    def setUp(self):<br>
+        # Call super's setUp().<br>
+        TestBase.setUp(self)<br>
+        # Find the line number to break at.<br>
+        self.line = line_number('main.cpp', '// Set break point at this line.')<br>
+<br>
+    def data_formatter_commands(self):<br>
+        """Test that that file and class static variables display correctly."""<br>
+        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br>
+<br>
+        lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br>
+<br>
+        self.runCmd("run", RUN_SUCCEEDED)<br>
+<br>
+        # The stop reason of the thread should be breakpoint.<br>
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,<br>
+            substrs = ['stopped',<br>
+                       'stop reason = breakpoint'])<br>
+<br>
+        # This is the function to remove the custom formats in order to have a<br>
+        # clean slate for the next test case.<br>
+        def cleanup():<br>
+            self.runCmd('type format clear', check=False)<br>
+            self.runCmd('type summary clear', check=False)<br>
+            self.runCmd('type filter clear', check=False)<br>
+            self.runCmd('type synth clear', check=False)<br>
+            self.runCmd("settings set target.max-children-count 256", check=False)<br>
+<br>
+        # Execute the cleanup function during test case tear down.<br>
+        self.addTearDownHook(cleanup)<br>
+<br>
+        self.expect("frame variable vBool",<br>
+            substrs = ['size=49','[0] = false','[1] = true','[18] = false','[27] = true','[36] = false','[47] = true','[48] = true'])<br>
+<br>
+        self.expect("expr vBool",<br>
+            substrs = ['size=49','[0] = false','[1] = true','[18] = false','[27] = true','[36] = false','[47] = true','[48] = true'])<br>
+<br>
+if __name__ == '__main__':<br>
+    import atexit<br>
+    lldb.SBDebugger.Initialize()<br>
+    atexit.register(lambda: lldb.SBDebugger.Terminate())<br>
+    unittest2.main()<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libcxx/vbool/main.cpp Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,69 @@<br>
+#include <string><br>
+#ifdef _LIBCPP_INLINE_VISIBILITY<br>
+#undef _LIBCPP_INLINE_VISIBILITY<br>
+#endif<br>
+#define _LIBCPP_INLINE_VISIBILITY<br>
+<br>
+#include <vector><br>
+<br>
+int main()<br>
+{<br>
+    std::vector<bool> vBool;<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(true);<br>
+<br>
+    return 0; // Set break point at this line.<br>
+}<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/Makefile Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,5 @@<br>
+LEVEL = ../../../../../make<br>
+<br>
+CXX_SOURCES := main.cpp<br>
+<br>
+include $(LEVEL)/Makefile.rules<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/TestDataFormatterStdVBool.py Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,69 @@<br>
+"""<br>
+Test lldb data formatter subsystem.<br>
+"""<br>
+<br>
+import os, time<br>
+import unittest2<br>
+import lldb<br>
+from lldbtest import *<br>
+import lldbutil<br>
+<br>
+class StdVBoolDataFormatterTestCase(TestBase):<br>
+<br>
+    mydir = os.path.join("functionalities", "data-formatter", "data-formatter-stl", "libstdcpp", "vbool")<br>
+<br>
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")<br>
+    @dsym_test<br>
+    def test_with_dsym_and_run_command(self):<br>
+        """Test data formatter commands."""<br>
+        self.buildDsym()<br>
+        self.data_formatter_commands()<br>
+<br>
+    @dwarf_test<br>
+    def test_with_dwarf_and_run_command(self):<br>
+        """Test data formatter commands."""<br>
+        self.buildDwarf()<br>
+        self.data_formatter_commands()<br>
+<br>
+    def setUp(self):<br>
+        # Call super's setUp().<br>
+        TestBase.setUp(self)<br>
+        # Find the line number to break at.<br>
+        self.line = line_number('main.cpp', '// Set break point at this line.')<br>
+<br>
+    def data_formatter_commands(self):<br>
+        """Test that that file and class static variables display correctly."""<br>
+        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)<br>
+<br>
+        lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1)<br>
+<br>
+        self.runCmd("run", RUN_SUCCEEDED)<br>
+<br>
+        # The stop reason of the thread should be breakpoint.<br>
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,<br>
+            substrs = ['stopped',<br>
+                       'stop reason = breakpoint'])<br>
+<br>
+        # This is the function to remove the custom formats in order to have a<br>
+        # clean slate for the next test case.<br>
+        def cleanup():<br>
+            self.runCmd('type format clear', check=False)<br>
+            self.runCmd('type summary clear', check=False)<br>
+            self.runCmd('type filter clear', check=False)<br>
+            self.runCmd('type synth clear', check=False)<br>
+            self.runCmd("settings set target.max-children-count 256", check=False)<br>
+<br>
+        # Execute the cleanup function during test case tear down.<br>
+        self.addTearDownHook(cleanup)<br>
+<br>
+        self.expect("frame variable vBool",<br>
+            substrs = ['size=49','[0] = false','[1] = true','[18] = false','[27] = true','[36] = false','[47] = true','[48] = true'])<br>
+<br>
+        self.expect("expr vBool",<br>
+            substrs = ['size=49','[0] = false','[1] = true','[18] = false','[27] = true','[36] = false','[47] = true','[48] = true'])<br>
+<br>
+if __name__ == '__main__':<br>
+    import atexit<br>
+    lldb.SBDebugger.Initialize()<br>
+    atexit.register(lambda: lldb.SBDebugger.Terminate())<br>
+    unittest2.main()<br>
<br>
Added: lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp?rev=174333&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp?rev=174333&view=auto</a><br>


==============================================================================<br>
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp (added)<br>
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/vbool/main.cpp Mon Feb  4 16:54:42 2013<br>
@@ -0,0 +1,63 @@<br>
+#include <vector><br>
+<br>
+int main()<br>
+{<br>
+    std::vector<bool> vBool;<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(false);<br>
+    vBool.push_back(true);<br>
+    vBool.push_back(true);<br>
+<br>
+    return 0; // Set break point at this line.<br>
+}<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
</blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>