diff options
author | Koan-Sin Tan <koansin.tan@gmail.com> | 2012-01-31 12:05:52 -0500 |
---|---|---|
committer | Koan-Sin Tan <koansin.tan@gmail.com> | 2012-01-31 12:05:52 -0500 |
commit | 7d4f18770073d968c70cd3ffcdd117f50a6056a2 (patch) | |
tree | d28ffbee135c6cac0bc89224d2bf7f98224aeb51 /src/base | |
parent | 4590b91fb8842f6a3b823bbc06334132de43d54b (diff) | |
download | gem5-7d4f18770073d968c70cd3ffcdd117f50a6056a2.tar.xz |
clang: Enable compiling gem5 using clang 2.9 and 3.0
This patch adds the necessary flags to the SConstruct and SConscript
files for compiling using clang 2.9 and later (on Ubuntu et al and OSX
XCode 4.2), and also cleans up a bunch of compiler warnings found by
clang. Most of the warnings are related to hidden virtual functions,
comparisons with unsigneds >= 0, and if-statements with empty
bodies. A number of mismatches between struct and class are also
fixed. clang 2.8 is not working as it has problems with class names
that occur in multiple namespaces (e.g. Statistics in
kernel_stats.hh).
clang has a bug (http://llvm.org/bugs/show_bug.cgi?id=7247) which
causes confusion between the container std::set and the function
Packet::set, and this is currently addressed by not including the
entire namespace std, but rather selecting e.g. "using std::vector" in
the appropriate places.
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/fast_alloc.cc | 4 | ||||
-rw-r--r-- | src/base/range_map.hh | 2 | ||||
-rw-r--r-- | src/base/remote_gdb.hh | 2 | ||||
-rw-r--r-- | src/base/stl_helpers.hh | 4 |
4 files changed, 4 insertions, 8 deletions
diff --git a/src/base/fast_alloc.cc b/src/base/fast_alloc.cc index 0736d26e2..d370b93e8 100644 --- a/src/base/fast_alloc.cc +++ b/src/base/fast_alloc.cc @@ -40,10 +40,6 @@ #if USE_FAST_ALLOC -#ifdef __GNUC__ -#pragma implementation -#endif - void *FastAlloc::freeLists[Num_Buckets]; #if FAST_ALLOC_STATS diff --git a/src/base/range_map.hh b/src/base/range_map.hh index 7714a0049..5d6547f9b 100644 --- a/src/base/range_map.hh +++ b/src/base/range_map.hh @@ -215,7 +215,7 @@ class range_multimap { std::pair<iterator,iterator> p; p = find(r); - if (p.first->first.start == r.start && p.first->first.end == r.end || + if ((p.first->first.start == r.start && p.first->first.end == r.end) || p.first == tree.end()) return tree.insert(std::make_pair<Range<T>,V>(r, d)); else diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh index 899c7c29e..15a725438 100644 --- a/src/base/remote_gdb.hh +++ b/src/base/remote_gdb.hh @@ -204,7 +204,7 @@ class BaseRemoteGDB public: HardBreakpoint(BaseRemoteGDB *_gdb, Addr addr); - std::string name() { return gdb->name() + ".hwbkpt"; } + const std::string name() const { return gdb->name() + ".hwbkpt"; } virtual void process(ThreadContext *tc); }; diff --git a/src/base/stl_helpers.hh b/src/base/stl_helpers.hh index a34ca7bb6..689cb626b 100644 --- a/src/base/stl_helpers.hh +++ b/src/base/stl_helpers.hh @@ -72,7 +72,7 @@ class ContainerPrint // Treat all objects in an stl container as pointers to heap objects, // calling delete on each one and zeroing the pointers along the way -template <typename T, template <typename T, typename A> class C, typename A> +template <template <typename T, typename A> class C, typename T, typename A> void deletePointers(C<T,A> &container) { @@ -81,7 +81,7 @@ deletePointers(C<T,A> &container) // Write out all elements in an stl container as a space separated // list enclosed in square brackets -template <typename T, template <typename T, typename A> class C, typename A> +template <template <typename T, typename A> class C, typename T, typename A> std::ostream & operator<<(std::ostream& out, const C<T,A> &vec) { |