LCOV - code coverage report
Current view: top level - gcc/cp - type-utils.h (source / functions) Hit Total Coverage
Test: gcc.info Lines: 11 11 100.0 %
Date: 2023-07-19 08:18:47 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Utilities for querying and manipulating type trees.
       2             :    Copyright (C) 2013-2023 Free Software Foundation, Inc.
       3             : 
       4             : This file is part of GCC.
       5             : 
       6             : GCC is free software; you can redistribute it and/or modify
       7             : it under the terms of the GNU General Public License as published by
       8             : the Free Software Foundation; either version 3, or (at your option)
       9             : any later version.
      10             : 
      11             : GCC is distributed in the hope that it will be useful,
      12             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : GNU General Public License for more details.
      15             : 
      16             : You should have received a copy of the GNU General Public License
      17             : along with GCC; see the file COPYING3.  If not see
      18             : <http://www.gnu.org/licenses/>.  */
      19             : 
      20             : #ifndef GCC_CP_TYPE_UTILS_H
      21             : #define GCC_CP_TYPE_UTILS_H
      22             : 
      23             : /* Returns the first tree within T that is directly matched by PRED.  T may be a
      24             :    type or PARM_DECL and is incrementally decomposed toward its type-specifier
      25             :    until a match is found.  NULL is returned if PRED does not match any
      26             :    part of T.
      27             : 
      28             :    This is primarily intended for detecting whether T uses `auto' or a concept
      29             :    identifier.  Since either of these can only appear as a type-specifier for
      30             :    the declaration in question, only top-level qualifications are traversed;
      31             :    find_type_usage does not look through the whole type.  */
      32             : 
      33             : inline tree
      34  1748436275 : find_type_usage (tree t, bool (*pred) (const_tree))
      35             : {
      36  2133856312 :   if (pred (t))
      37             :     return t;
      38             : 
      39  2112776180 :   enum tree_code code = TREE_CODE (t);
      40             : 
      41  2112776180 :   if (code == POINTER_TYPE || code == REFERENCE_TYPE
      42  2112776180 :       || code == PARM_DECL || code == OFFSET_TYPE
      43  1827635338 :       || code == FUNCTION_TYPE || code == METHOD_TYPE
      44  1758744274 :       || code == ARRAY_TYPE)
      45   384459165 :     return find_type_usage (TREE_TYPE (t), pred);
      46             : 
      47  1728317015 :   if (TYPE_PTRMEMFUNC_P (t))
      48      960872 :     return find_type_usage
      49      960872 :       (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (t)), pred);
      50             : 
      51             :   return NULL_TREE;
      52             : }
      53             : 
      54             : #endif // GCC_CP_TYPE_UTILS_H

Generated by: LCOV version 1.16