analyzer: fix ICE on METHOD_TYPE (PR 93212)
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 9 Jan 2020 15:12:59 +0000 (10:12 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 15 Jan 2020 01:58:19 +0000 (20:58 -0500)
PR analyzer/93212 reports an ICE when attempting to use -fanalyzer
on a C++ source file.  That isn't supported yet, but the fix is
trivial (handling METHOD_TYPE as well as FUNCTION_TYPE).

gcc/analyzer/ChangeLog:
PR analyzer/93212
* region-model.cc (make_region_for_type): Use
FUNC_OR_METHOD_TYPE_P rather than comparing against FUNCTION_TYPE.
* region-model.h (function_region::function_region): Likewise.

gcc/analyzer/ChangeLog
gcc/analyzer/region-model.cc
gcc/analyzer/region-model.h

index 7d3b109944eef5e4e374dc3e93403412098ee49a..340288c08d4c2577f0208c16a35066dd4ad8adc6 100644 (file)
@@ -1,3 +1,10 @@
+2020-01-14  David Malcolm  <dmalcolm@redhat.com>
+
+       PR analyzer/93212
+       * region-model.cc (make_region_for_type): Use
+       FUNC_OR_METHOD_TYPE_P rather than comparing against FUNCTION_TYPE.
+       * region-model.h (function_region::function_region): Likewise.
+
 2020-01-14  David Malcolm  <dmalcolm@redhat.com>
 
        * program-state.cc (sm_state_map::clone_with_remapping): Copy
index b492222d64d6e7cabc3d202383eae6448bd40e6e..5c39be4fd7f301140aedb20dd51565f0ec483169 100644 (file)
@@ -5963,7 +5963,7 @@ make_region_for_type (region_id parent_rid, tree type)
   if (TREE_CODE (type) == UNION_TYPE)
     return new union_region (parent_rid, type);
 
-  if (TREE_CODE (type) == FUNCTION_TYPE)
+  if (FUNC_OR_METHOD_TYPE_P (type))
     return new function_region (parent_rid, type);
 
   /* If we have a void *, make a new symbolic region.  */
index 2d0c0618bd0b7b243b6613365bb577db06648357..eea808e61ebbcfeab6c9d273b9f6400a5572c5e3 100644 (file)
@@ -1202,7 +1202,7 @@ public:
   function_region (region_id parent_rid, tree type)
   : map_region (parent_rid, type)
   {
-    gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
+    gcc_assert (FUNC_OR_METHOD_TYPE_P (type));
   }
   function_region (const function_region &other)
   : map_region (other)