summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0024-except.c-build_noexcept_spec-Call-cxx_constant_value.patch
blob: bb21bb0e34781223296541661c9d15e63aa296f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Upstream-Status: Inappropriate [Backport]
From 3a987d8e4a8c885fe7fc54595ebdd82d5291e1e7 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:30 +0000
Subject: [PATCH 024/200] 	* except.c (build_noexcept_spec): Call cxx_constant_value after
 	converting to bool.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171665 138bc75d-0d04-0410-961f-82ee72b054a4

index c05e507..a814d67 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1203,10 +1203,10 @@ build_noexcept_spec (tree expr, int complain)
      it until instantiation.  */
   if (!processing_template_decl)
     {
-      expr = cxx_constant_value (expr);
       expr = perform_implicit_conversion_flags (boolean_type_node, expr,
 						complain,
 						LOOKUP_NORMAL);
+      expr = cxx_constant_value (expr);
     }
   if (expr == boolean_true_node)
     return noexcept_true_spec;
new file mode 100644
index 0000000..7bf961b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C
@@ -0,0 +1,15 @@
+// { dg-options -std=c++0x }
+
+struct booleable {
+  bool data;
+  constexpr explicit operator bool() { return data; }
+};
+
+constexpr booleable truthy_func() { return {true}; }
+
+void funky() noexcept(truthy_func()) {}
+
+int main() {
+  funky();
+  return 0;
+}
-- 
1.7.0.4

OpenPOWER on IntegriCloud