guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

263/376: Fix build on gcc < 4.7


From: Ludovic Courtès
Subject: 263/376: Fix build on gcc < 4.7
Date: Wed, 28 Jan 2015 22:05:30 +0000

civodul pushed a commit to tag 1.8
in repository guix.

commit 6062b121605b298c73ddf11688b075ed78a46df2
Author: Shea Levy <address@hidden>
Date:   Mon Oct 20 12:15:50 2014 -0400

    Fix build on gcc < 4.7
---
 src/libexpr/eval.hh  |    3 +++
 src/libutil/types.hh |   13 +++++++++++++
 2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index daf5384..51ab1b1 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -340,6 +340,9 @@ struct InvalidPathError : EvalError
 {
     Path path;
     InvalidPathError(const Path & path);
+#ifdef EXCEPTION_NEEDS_THROW_SPEC
+    ~InvalidPathError() throw () { };
+#endif
 };
 
 /* Realise all paths in `context' */
diff --git a/src/libutil/types.hh b/src/libutil/types.hh
index 906a959..160884e 100644
--- a/src/libutil/types.hh
+++ b/src/libutil/types.hh
@@ -8,6 +8,15 @@
 
 #include <boost/format.hpp>
 
+/* Before 4.7, gcc's std::exception uses empty throw() specifiers for
+ * its (virtual) destructor and what() in c++11 mode, in violation of spec
+ */
+#ifdef __GNUC__
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
+#define EXCEPTION_NEEDS_THROW_SPEC
+#endif
+#endif
+
 
 namespace nix {
 
@@ -39,8 +48,12 @@ protected:
 public:
     unsigned int status; // exit status
     BaseError(const FormatOrString & fs, unsigned int status = 1);
+#ifdef EXCEPTION_NEEDS_THROW_SPEC
     ~BaseError() throw () { };
     const char * what() const throw () { return err.c_str(); }
+#else
+    const char * what() const noexcept { return err.c_str(); }
+#endif
     const string & msg() const { return err; }
     const string & prefix() const { return prefix_; }
     BaseError & addPrefix(const FormatOrString & fs);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]