cp-tree.h: Clarify exception spec node comment.
authorNathan Sidwell <nathan@acm.org>
Wed, 18 Jan 2017 12:52:24 +0000 (12:52 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Wed, 18 Jan 2017 12:52:24 +0000 (12:52 +0000)
* cp-tree.h: Clarify exception spec node comment.
* except.c (nothrow_spec_p): Simplify by checking node-equality.

From-SVN: r244576

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/except.c

index 7733be7cc523d6d85ecbb482c3f78936480b36a4..32bf9e36070f5d284eb3260d012c6d258822ceaa 100644 (file)
@@ -1,5 +1,8 @@
 2017-01-18  Nathan Sidwell  <nathan@acm.org>
 
+       * cp-tree.h: Clarify exception spec node comment.
+       * except.c (nothrow_spec_p): Simplify by checking node-equality.
+
        PR c++/79091
        * mangle.c (write_exception_spec): Check nothrow explicitly.
        (write_encoding): Don't increment processing_template_decl around
index 0c8f147c6b24ca6bd1e9ec6cbd3ffe3b64bc3eb3..98e4cbd05de79008e6189cc5025cb35b638dc6cf 100644 (file)
@@ -1212,7 +1212,8 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 #define lang_name_c                    cp_global_trees[CPTI_LANG_NAME_C]
 #define lang_name_cplusplus            cp_global_trees[CPTI_LANG_NAME_CPLUSPLUS]
 
-/* Exception specifier used for throw().  */
+/* Exception specifiers used for throw(), noexcept(true) and
+   noexcept(false).  We rely on these being uncloned.  */
 #define empty_except_spec              cp_global_trees[CPTI_EMPTY_EXCEPT_SPEC]
 #define noexcept_true_spec             cp_global_trees[CPTI_NOEXCEPT_TRUE_SPEC]
 #define noexcept_false_spec            cp_global_trees[CPTI_NOEXCEPT_FALSE_SPEC]
index 034c35a4888500c3a88c0ed6a3970b1201c5a413..bfc32908aece12af5321ce6bc90b927f8e9b46a2 100644 (file)
@@ -1143,15 +1143,17 @@ bool
 nothrow_spec_p (const_tree spec)
 {
   gcc_assert (!DEFERRED_NOEXCEPT_SPEC_P (spec));
-  if (spec == NULL_TREE
-      || TREE_VALUE (spec) != NULL_TREE
-      || spec == noexcept_false_spec)
-    return false;
-  if (TREE_PURPOSE (spec) == NULL_TREE
+
+  if (spec == empty_except_spec
       || spec == noexcept_true_spec)
     return true;
-  gcc_assert (processing_template_decl
-             || TREE_PURPOSE (spec) == error_mark_node);
+
+  gcc_assert (!spec
+             || TREE_VALUE (spec)
+             || spec == noexcept_false_spec
+             || TREE_PURPOSE (spec) == error_mark_node
+             || processing_template_decl);
+
   return false;
 }