commit 99835abc5d2a7fd3ae0950c8a16fd6d223d408c9
Author: Ollie Wild <a...@google.com>
Date:   Fri Apr 29 13:03:57 2011 -0400

    Remove unqualified lookups into dependent template base classes from
    STL headers.  These break clang.
    
    See http://clang.llvm.org/compatibility.html#dep_lookup_bases.

    To be applied to google/main.  Would also like permissiont to submit to
    trunk.

M       libstdc++-v3/include/ext/sso_string_base.h
M       libstdc++-v3/include/ext/vstring.h
M       libstdc++-v3/include/ext/vstring.tcc

Tested:
  Tested via buildit bootstrap and tests.

ChangeLog:

2011-05-02  Ollie Wild  <a...@google.com>

        * include/ext/sso_string_base.h (__sso_string_base<>::_M_construct):
        Fix unqualified lookup.
        (__sso_string_base<>::_M_construct): Likewise.
        (__sso_string_base<>::_M_construct): Likewise.
        (__sso_string_base<>::_M_assign): Likewise.
        (__sso_string_base<>::_M_reserve): Likewise.
        (__sso_string_base<>::_M_mutate): Likewise.
        (__sso_string_base<>::_M_erase): Likewise.
        * include/ext/vstring.h (__versa_string<>::replace): Likewise.
        (__versa_string<>::compare): Likewise.
        * include/ext/vstring.tcc (__versa_string<>::compare): Likewise.
        (__versa_string<>::compare): Likewise.
        (__versa_string<>::compare): Likewise.
        (__versa_string<>::compare): Likewise.
        (__versa_string<>::compare): Likewise.

diff --git a/libstdc++-v3/include/ext/sso_string_base.h 
b/libstdc++-v3/include/ext/sso_string_base.h
index 638eeba..39a62d6 100644
--- a/libstdc++-v3/include/ext/sso_string_base.h
+++ b/libstdc++-v3/include/ext/sso_string_base.h
@@ -432,7 +432,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                    // Allocate more space.
                    __capacity = __len + 1;
                    _CharT* __another = _M_create(__capacity, __len);
-                   _S_copy(__another, _M_data(), __len);
+                   this->_S_copy(__another, _M_data(), __len);
                    _M_dispose();
                    _M_data(__another);
                    _M_capacity(__capacity);
@@ -472,7 +472,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
        // Check for out_of_range and length_error exceptions.
        __try
-         { _S_copy_chars(_M_data(), __beg, __end); }
+         { this->_S_copy_chars(_M_data(), __beg, __end); }
        __catch(...)
          {
            _M_dispose();
@@ -494,7 +494,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        }
 
       if (__n)
-       _S_assign(_M_data(), __n, __c);
+       this->_S_assign(_M_data(), __n, __c);
 
       _M_set_length_no_wipe(__n);
     }
@@ -519,7 +519,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            }
 
          if (__rsize)
-           _S_copy(_M_data(), __rcs._M_data(), __rsize);
+           this->_S_copy(_M_data(), __rcs._M_data(), __rsize);
 
          _M_set_length(__rsize);
        }
@@ -541,14 +541,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
              || __res > size_type(_S_local_capacity))
            {
              _CharT* __tmp = _M_create(__res, __capacity);
-             _S_copy(__tmp, _M_data(), _M_length() + 1);
+             this->_S_copy(__tmp, _M_data(), _M_length() + 1);
              _M_dispose();
              _M_data(__tmp);
              _M_capacity(__res);
            }
          else if (!_M_is_local())
            {
-             _S_copy(_M_local_data, _M_data(), _M_length() + 1);
+             this->_S_copy(_M_local_data, _M_data(), _M_length() + 1);
              _M_destroy(__capacity);
              _M_data(_M_local_data);
            }
@@ -567,12 +567,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _CharT* __r = _M_create(__new_capacity, _M_capacity());
 
       if (__pos)
-       _S_copy(__r, _M_data(), __pos);
+       this->_S_copy(__r, _M_data(), __pos);
       if (__s && __len2)
-       _S_copy(__r + __pos, __s, __len2);
+       this->_S_copy(__r + __pos, __s, __len2);
       if (__how_much)
-       _S_copy(__r + __pos + __len2,
-               _M_data() + __pos + __len1, __how_much);
+       this->_S_copy(__r + __pos + __len2,
+                     _M_data() + __pos + __len1, __how_much);
       
       _M_dispose();
       _M_data(__r);
@@ -587,8 +587,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const size_type __how_much = _M_length() - __pos - __n;
 
       if (__how_much && __n)
-       _S_move(_M_data() + __pos, _M_data() + __pos + __n,
-               __how_much);
+       this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much);
 
       _M_set_length(_M_length() - __n);
     }
diff --git a/libstdc++-v3/include/ext/vstring.h 
b/libstdc++-v3/include/ext/vstring.h
index 90a5683..57f36a6 100644
--- a/libstdc++-v3/include/ext/vstring.h
+++ b/libstdc++-v3/include/ext/vstring.h
@@ -1374,7 +1374,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                   && __i2 <= _M_iend());
          __glibcxx_requires_valid_range(__k1, __k2);
          typedef typename std::__is_integer<_InputIterator>::__type _Integral;
-         return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
+         return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
        }
 
       // Specializations for the common case of pointer and iterator:
@@ -1929,7 +1929,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
        int __r = traits_type::compare(this->_M_data(), __str.data(), __len);
        if (!__r)
-         __r = _S_compare(__size, __osize);
+         __r = this->_S_compare(__size, __osize);
        return __r;
       }
 
diff --git a/libstdc++-v3/include/ext/vstring.tcc 
b/libstdc++-v3/include/ext/vstring.tcc
index e36058b..588985b 100644
--- a/libstdc++-v3/include/ext/vstring.tcc
+++ b/libstdc++-v3/include/ext/vstring.tcc
@@ -466,7 +466,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       int __r = traits_type::compare(this->_M_data() + __pos,
                                     __str.data(), __len);
       if (!__r)
-       __r = _S_compare(__n, __osize);
+       __r = this->_S_compare(__n, __osize);
       return __r;
     }
 
@@ -485,7 +485,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       int __r = traits_type::compare(this->_M_data() + __pos1,
                                     __str.data() + __pos2, __len);
       if (!__r)
-       __r = _S_compare(__n1, __n2);
+       __r = this->_S_compare(__n1, __n2);
       return __r;
     }
 
@@ -501,7 +501,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const size_type __len = std::min(__size, __osize);
       int __r = traits_type::compare(this->_M_data(), __s, __len);
       if (!__r)
-       __r = _S_compare(__size, __osize);
+       __r = this->_S_compare(__size, __osize);
       return __r;
     }
 
@@ -518,7 +518,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const size_type __len = std::min(__n1, __osize);
       int __r = traits_type::compare(this->_M_data() + __pos, __s, __len);
       if (!__r)
-       __r = _S_compare(__n1, __osize);
+       __r = this->_S_compare(__n1, __osize);
       return __r;
     }
 
@@ -535,7 +535,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const size_type __len = std::min(__n1, __n2);
       int __r = traits_type::compare(this->_M_data() + __pos, __s, __len);
       if (!__r)
-       __r = _S_compare(__n1, __n2);
+       __r = this->_S_compare(__n1, __n2);
       return __r;
     }
 

--
This patch is available for review at http://codereview.appspot.com/4439085

Reply via email to