[libcxxabi] r209909 - Let libc++abi compile with gcc.

David Blaikie dblaikie at gmail.com
Fri May 30 12:48:43 PDT 2014


On Fri, May 30, 2014 at 11:13 AM, Nico Weber <thakis at chromium.org> wrote:
> On Fri, May 30, 2014 at 7:50 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>
>> On Fri, May 30, 2014 at 10:27 AM, Nico Weber <nicolasweber at gmx.de> wrote:
>> > Author: nico
>> > Date: Fri May 30 12:27:21 2014
>> > New Revision: 209909
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=209909&view=rev
>> > Log:
>> > Let libc++abi compile with gcc.
>> >
>> > There was a single problem in cxa_demangle.cpp, where gcc would complain
>> > `error: changes meaning of 'String'` about the line `typedef String
>> > String;`.
>> > According to 3.3.7p2, this diagnostic is allowed (but not required, so
>> > clang
>> > does not have to report this).
>> >
>> > As a fix, make string_pair a template and pass String as template
>> > parameter.
>> > This fixes the error with gcc and also removes some repetition from the
>> > code.
>>
>> Seems like a ind of painful workaround to introduce a template with
>> one instantiation...
>
>
> I agree it looks a bit weird, but it seemed better to me than repeating the
> type. If you can come up with something nice, feel free to improve on this
> :-)
>
>>
>> What's the point of that typedef anyway?
>
>
> Several template functions above do "C::String", so Db needs to have a
> String typedef.

Well, we could differentiate the typedef from the type in many other
ways - rename the typedef (string_type?)

Wait - why are all those functions templated anyway? There's only one
thing they're called with, the actual Db.... is this just to avoid an
appropriate bunch of forward declarations?

- David

>
>>
>>
>> >
>> > No behavior change.
>> >
>> > Modified:
>> >     libcxxabi/trunk/src/cxa_demangle.cpp
>> >
>> > Modified: libcxxabi/trunk/src/cxa_demangle.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_demangle.cpp?rev=209909&r1=209908&r2=209909&view=diff
>> >
>> > ==============================================================================
>> > --- libcxxabi/trunk/src/cxa_demangle.cpp (original)
>> > +++ libcxxabi/trunk/src/cxa_demangle.cpp Fri May 30 12:27:21 2014
>> > @@ -4847,32 +4847,33 @@ operator!=(const malloc_alloc<T>& x, con
>> >  const size_t bs = 4 * 1024;
>> >  template <class T> using Alloc = short_alloc<T, bs>;
>> >  template <class T> using Vector = std::vector<T, Alloc<T>>;
>> > -using String = std::basic_string<char, std::char_traits<char>,
>> > malloc_alloc<char>>;
>> >
>> > +template <class StrT>
>> >  struct string_pair
>> >  {
>> > -    String first;
>> > -    String second;
>> > +    StrT first;
>> > +    StrT second;
>> >
>> >      string_pair() = default;
>> > -    string_pair(String f) : first(std::move(f)) {}
>> > -    string_pair(String f, String s)
>> > +    string_pair(StrT f) : first(std::move(f)) {}
>> > +    string_pair(StrT f, StrT s)
>> >          : first(std::move(f)), second(std::move(s)) {}
>> >      template <size_t N>
>> >          string_pair(const char (&s)[N]) : first(s, N-1) {}
>> >
>> >      size_t size() const {return first.size() + second.size();}
>> > -    String full() const {return first + second;}
>> > -    String move_full() {return std::move(first) + std::move(second);}
>> > +    StrT full() const {return first + second;}
>> > +    StrT move_full() {return std::move(first) + std::move(second);}
>> >  };
>> >
>> >  struct Db
>> >  {
>> > -    typedef String String;
>> > -    typedef Vector<string_pair> sub_type;
>> > +    typedef std::basic_string<char, std::char_traits<char>,
>> > +                              malloc_alloc<char>> String;
>> > +    typedef Vector<string_pair<String>> sub_type;
>> >      typedef Vector<sub_type> template_param_type;
>> > -    Vector<string_pair> names;
>> > -    Vector<sub_type> subs;
>> > +    sub_type names;
>> > +    template_param_type subs;
>> >      Vector<template_param_type> template_param;
>> >      unsigned cv;
>> >      unsigned ref;
>> >
>> >
>> > _______________________________________________
>> > cfe-commits mailing list
>> > cfe-commits at cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>



More information about the cfe-commits mailing list