Hello, maintainers.

Recently, I tried to figure out how the rope container works by
dumping the content. I found that the implementation of rope::dump()
has a misspell bug which use a static member function as a enum value.

It seems that the original SGI STL implementation doesn't have this bug.

bug trigger code below.

#include <ext/rope>
int main() {
    __gnu_cxx::crope r(100, 'x');
    r.dump();
    return 0;
}

patch is attached.

Thanks,
Georeth
diff --git a/libstdc++-v3/include/ext/ropeimpl.h 
b/libstdc++-v3/include/ext/ropeimpl.h
index 4316af7..93bd152 100644
--- a/libstdc++-v3/include/ext/ropeimpl.h
+++ b/libstdc++-v3/include/ext/ropeimpl.h
@@ -1117,7 +1117,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          printf("NULL\n");
          return;
        }
-      if (_S_concat == __r->_M_tag)
+      if (__detail::_S_concat == __r->_M_tag)
        {
          _RopeConcatenation* __c = (_RopeConcatenation*)__r;
          _RopeRep* __left = __c->_M_left;

Reply via email to