PR c++/86378 - functional cast in noexcept-specifier.
authorJason Merrill <jason@redhat.com>
Tue, 3 Jul 2018 14:13:02 +0000 (10:13 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 3 Jul 2018 14:13:02 +0000 (10:13 -0400)
* tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration.

From-SVN: r262343

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp0x/noexcept33.C [new file with mode: 0644]

index 53bcb1f93192e3d0af6a7ac9edf455b87afedd49..de313ae2ff578fe37ced5cde4c6ada778b79c888 100644 (file)
@@ -1,3 +1,8 @@
+2018-07-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/86378 - functional cast in noexcept-specifier.
+       * tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration.
+
 2018-07-02  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range
index 361248d4b52b37f38d225b844f71b122ace7fdec..b1333f55e394aa854545680d8decc5bbb713fb11 100644 (file)
@@ -1735,9 +1735,9 @@ strip_typedefs_expr (tree t, bool *remove_attributes)
        tree it;
        for (it = t; it; it = TREE_CHAIN (it))
          {
-           tree val = strip_typedefs_expr (TREE_VALUE (t), remove_attributes);
+           tree val = strip_typedefs_expr (TREE_VALUE (it), remove_attributes);
            vec_safe_push (vec, val);
-           if (val != TREE_VALUE (t))
+           if (val != TREE_VALUE (it))
              changed = true;
            gcc_assert (TREE_PURPOSE (it) == NULL_TREE);
          }
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept33.C b/gcc/testsuite/g++.dg/cpp0x/noexcept33.C
new file mode 100644 (file)
index 0000000..c5a03de
--- /dev/null
@@ -0,0 +1,28 @@
+// PR c++/86378
+// { dg-do compile { target c++11 } }
+
+struct Pepper {};
+struct Apple { Apple(int) {} };
+
+struct Combination : Apple, Pepper
+{
+  Combination(Pepper p, Apple a)
+    : Apple(a), Pepper(p)
+  {}
+};
+
+struct MyCombination
+{
+  using Spice = Pepper;
+  using Fruit = Apple;
+
+  Combination combination;
+
+  template<typename T>
+  constexpr MyCombination(T&& t)
+  noexcept(noexcept(Combination(Spice(), Fruit(t))))
+    : combination(Spice(), Fruit(t))
+  {}
+};
+
+MyCombination obj(Apple(4));