SWIG: Ensure ptrdiff_t is a known type in gcc >= 4.6.1
authorAndreas Hansson <andreas.hansson@arm.com>
Wed, 29 Feb 2012 09:26:58 +0000 (04:26 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Wed, 29 Feb 2012 09:26:58 +0000 (04:26 -0500)
This patch fixes a compilation error that occurs with gcc >= 4.6.1,
caused by swig not including cstddef and not using the std:: namespace
prefix for ptrdiff_t. There is an old patch,
http://reviews.m5sim.org/r/913/ that no longer applies cleanly and
this might be re-iterating the same issue.

We work around the problem by always enforcing the inclusion of
cstddef in all swig interface declarations, and also by explicitly
using std::ptrdiff_t.

src/python/m5/SimObject.py

index a2de7a0861b423e5ab3722d0562c1558102b3163..9c6a32f41ec96ec2265cccc8247ff4769d66d3c5 100644 (file)
@@ -408,6 +408,19 @@ class MetaSimObject(type):
         for param in params:
             param.cxx_predecls(code)
         cls.export_method_cxx_predecls(code)
+        code('''\
+/**
+  * This is a workaround for bug in swig. Prior to gcc 4.6.1 the STL
+  * headers like vector, string, etc. used to automatically pull in
+  * the cstddef header but starting with gcc 4.6.1 they no longer do.
+  * This leads to swig generated a file that does not compile so we
+  * explicitly include cstddef. Additionally, including version 2.0.4,
+  * swig uses ptrdiff_t without the std:: namespace prefix which is
+  * required with gcc 4.6.1. We explicitly provide access to it.
+  */
+#include <cstddef>
+using std::ptrdiff_t;
+''')
         code('%}')
         code()