summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2014-05-30 17:27:21 +0000
committerNico Weber <nicolasweber@gmx.de>2014-05-30 17:27:21 +0000
commit897f23dda82cae6e08c464509195be90015ed3c8 (patch)
tree4ab4a630fd2653f8f8ff150f585546ea9863cf86
parent853ae946607ab370e10703f1550c72404374efd9 (diff)
downloadbcm5719-llvm-897f23dda82cae6e08c464509195be90015ed3c8.tar.gz
bcm5719-llvm-897f23dda82cae6e08c464509195be90015ed3c8.zip
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. No behavior change. llvm-svn: 209909
-rw-r--r--libcxxabi/src/cxa_demangle.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/libcxxabi/src/cxa_demangle.cpp b/libcxxabi/src/cxa_demangle.cpp
index ff28c79bee3..c67e20fdf47 100644
--- a/libcxxabi/src/cxa_demangle.cpp
+++ b/libcxxabi/src/cxa_demangle.cpp
@@ -4847,32 +4847,33 @@ operator!=(const malloc_alloc<T>& x, const malloc_alloc<U>& y) noexcept
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;
OpenPOWER on IntegriCloud