1*e4b17023SJohn Marino/* Copyright (C) 2001, 2002, 2004, 2005, 2007, 2010 2*e4b17023SJohn Marino Free Software Foundation, Inc. 3*e4b17023SJohn Marino Contributed by Joseph Myers <jsm28@cam.ac.uk>. 4*e4b17023SJohn Marino 5*e4b17023SJohn MarinoThis file is part of GCC. 6*e4b17023SJohn Marino 7*e4b17023SJohn MarinoGCC is free software; you can redistribute it and/or modify it under 8*e4b17023SJohn Marinothe terms of the GNU General Public License as published by the Free 9*e4b17023SJohn MarinoSoftware Foundation; either version 3, or (at your option) any later 10*e4b17023SJohn Marinoversion. 11*e4b17023SJohn Marino 12*e4b17023SJohn MarinoGCC is distributed in the hope that it will be useful, but WITHOUT ANY 13*e4b17023SJohn MarinoWARRANTY; without even the implied warranty of MERCHANTABILITY or 14*e4b17023SJohn MarinoFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15*e4b17023SJohn Marinofor more details. 16*e4b17023SJohn Marino 17*e4b17023SJohn MarinoYou should have received a copy of the GNU General Public License 18*e4b17023SJohn Marinoalong with GCC; see the file COPYING3. If not see 19*e4b17023SJohn Marino<http://www.gnu.org/licenses/>. */ 20*e4b17023SJohn Marino 21*e4b17023SJohn Marino/* This header provides a declarative way of describing the attributes 22*e4b17023SJohn Marino that are applied to some functions by default. 23*e4b17023SJohn Marino 24*e4b17023SJohn Marino Before including this header, you must define the following macros. 25*e4b17023SJohn Marino In each case where there is an ENUM, it is an identifier used to 26*e4b17023SJohn Marino reference the tree in subsequent definitions. 27*e4b17023SJohn Marino 28*e4b17023SJohn Marino DEF_ATTR_NULL_TREE (ENUM) 29*e4b17023SJohn Marino 30*e4b17023SJohn Marino Constructs a NULL_TREE. 31*e4b17023SJohn Marino 32*e4b17023SJohn Marino DEF_ATTR_INT (ENUM, VALUE) 33*e4b17023SJohn Marino 34*e4b17023SJohn Marino Constructs an INTEGER_CST with value VALUE (an integer representable 35*e4b17023SJohn Marino in HOST_WIDE_INT). 36*e4b17023SJohn Marino 37*e4b17023SJohn Marino DEF_ATTR_IDENT (ENUM, STRING) 38*e4b17023SJohn Marino 39*e4b17023SJohn Marino Constructs an IDENTIFIER_NODE for STRING. 40*e4b17023SJohn Marino 41*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ENUM, PURPOSE, VALUE, CHAIN) 42*e4b17023SJohn Marino 43*e4b17023SJohn Marino Constructs a TREE_LIST with given PURPOSE, VALUE and CHAIN (given 44*e4b17023SJohn Marino as previous ENUM names). */ 45*e4b17023SJohn Marino 46*e4b17023SJohn MarinoDEF_ATTR_NULL_TREE (ATTR_NULL) 47*e4b17023SJohn Marino 48*e4b17023SJohn Marino/* Construct a tree for a given integer and a list containing it. */ 49*e4b17023SJohn Marino#define DEF_ATTR_FOR_INT(VALUE) \ 50*e4b17023SJohn Marino DEF_ATTR_INT (ATTR_##VALUE, VALUE) \ 51*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE, ATTR_NULL, \ 52*e4b17023SJohn Marino ATTR_##VALUE, ATTR_NULL) 53*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (0) 54*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (1) 55*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (2) 56*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (3) 57*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (4) 58*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (5) 59*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (6) 60*e4b17023SJohn Marino#undef DEF_ATTR_FOR_INT 61*e4b17023SJohn Marino 62*e4b17023SJohn Marino/* Construct a tree for a list of two integers. */ 63*e4b17023SJohn Marino#define DEF_LIST_INT_INT(VALUE1, VALUE2) \ 64*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE1##_##VALUE2, ATTR_NULL, \ 65*e4b17023SJohn Marino ATTR_##VALUE1, ATTR_LIST_##VALUE2) 66*e4b17023SJohn MarinoDEF_LIST_INT_INT (1,0) 67*e4b17023SJohn MarinoDEF_LIST_INT_INT (1,2) 68*e4b17023SJohn MarinoDEF_LIST_INT_INT (2,0) 69*e4b17023SJohn MarinoDEF_LIST_INT_INT (2,3) 70*e4b17023SJohn MarinoDEF_LIST_INT_INT (3,0) 71*e4b17023SJohn MarinoDEF_LIST_INT_INT (3,4) 72*e4b17023SJohn MarinoDEF_LIST_INT_INT (4,0) 73*e4b17023SJohn MarinoDEF_LIST_INT_INT (4,5) 74*e4b17023SJohn MarinoDEF_LIST_INT_INT (5,0) 75*e4b17023SJohn MarinoDEF_LIST_INT_INT (5,6) 76*e4b17023SJohn Marino#undef DEF_LIST_INT_INT 77*e4b17023SJohn Marino 78*e4b17023SJohn Marino/* Construct trees for identifiers. */ 79*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_CONST, "const") 80*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_FORMAT, "format") 81*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg") 82*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_MALLOC, "malloc") 83*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NONNULL, "nonnull") 84*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NORETURN, "noreturn") 85*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NOTHROW, "nothrow") 86*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_LEAF, "leaf") 87*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_PRINTF, "printf") 88*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_ASM_FPRINTF, "asm_fprintf") 89*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_DIAG, "gcc_diag") 90*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_CDIAG, "gcc_cdiag") 91*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_CXXDIAG, "gcc_cxxdiag") 92*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_PURE, "pure") 93*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NOVOPS, "no vops") 94*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_SCANF, "scanf") 95*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_SENTINEL, "sentinel") 96*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_STRFMON, "strfmon") 97*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_STRFTIME, "strftime") 98*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TYPEGENERIC, "type generic") 99*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TM_REGPARM, "*tm regparm") 100*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TM_TMPURE, "transaction_pure") 101*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_RETURNS_TWICE, "returns_twice") 102*e4b17023SJohn Marino 103*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOVOPS_LIST, ATTR_NOVOPS, ATTR_NULL, ATTR_NULL) 104*e4b17023SJohn Marino 105*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOVOPS_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOVOPS_LIST) 106*e4b17023SJohn Marino 107*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NULL) 108*e4b17023SJohn Marino 109*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_LIST, ATTR_NOTHROW, ATTR_NULL, ATTR_NULL) 110*e4b17023SJohn Marino 111*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOTHROW_LIST) 112*e4b17023SJohn Marino 113*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LIST, ATTR_CONST, \ 114*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LIST) 115*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LEAF_LIST, ATTR_CONST, \ 116*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) 117*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LIST, ATTR_PURE, \ 118*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LIST) 119*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LEAF_LIST, ATTR_PURE, \ 120*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) 121*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NOVOPS_LIST, ATTR_NOVOPS, \ 122*e4b17023SJohn Marino ATTR_NULL, ATTR_PURE_NOTHROW_LIST) 123*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NOVOPS_LEAF_LIST, ATTR_NOVOPS,\ 124*e4b17023SJohn Marino ATTR_NULL, ATTR_PURE_NOTHROW_LEAF_LIST) 125*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LIST, ATTR_NORETURN, \ 126*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LIST) 127*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST, ATTR_NORETURN,\ 128*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) 129*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LIST, ATTR_MALLOC, \ 130*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LIST) 131*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LEAF_LIST, ATTR_MALLOC, \ 132*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) 133*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LIST, ATTR_SENTINEL, \ 134*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LIST) 135*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LEAF_LIST, ATTR_SENTINEL, \ 136*e4b17023SJohn Marino ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) 137*e4b17023SJohn Marino 138*e4b17023SJohn Marino/* Functions whose pointer parameter(s) are all nonnull. */ 139*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_LIST, ATTR_NONNULL, ATTR_NULL, ATTR_NULL) 140*e4b17023SJohn Marino/* Functions whose first parameter is a nonnull pointer. */ 141*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, ATTR_NULL) 142*e4b17023SJohn Marino/* Functions whose second parameter is a nonnull pointer. */ 143*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, ATTR_NULL) 144*e4b17023SJohn Marino/* Functions whose third parameter is a nonnull pointer. */ 145*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, ATTR_NULL) 146*e4b17023SJohn Marino/* Nothrow functions with the sentinel(1) attribute. */ 147*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1, ATTR_SENTINEL, ATTR_LIST_1, \ 148*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 149*e4b17023SJohn Marino/* Nothrow functions whose pointer parameter(s) are all nonnull. */ 150*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL, ATTR_NONNULL, ATTR_NULL, \ 151*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 152*e4b17023SJohn Marino/* Nothrow leaf functions whose pointer parameter(s) are all nonnull. */ 153*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF, ATTR_NONNULL, ATTR_NULL, \ 154*e4b17023SJohn Marino ATTR_NOTHROW_LEAF_LIST) 155*e4b17023SJohn Marino/* Nothrow functions whose first parameter is a nonnull pointer. */ 156*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, \ 157*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 158*e4b17023SJohn Marino/* Nothrow functions whose second parameter is a nonnull pointer. */ 159*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, \ 160*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 161*e4b17023SJohn Marino/* Nothrow functions whose third parameter is a nonnull pointer. */ 162*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, \ 163*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 164*e4b17023SJohn Marino/* Nothrow functions whose fourth parameter is a nonnull pointer. */ 165*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_4, ATTR_NONNULL, ATTR_LIST_4, \ 166*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 167*e4b17023SJohn Marino/* Nothrow functions whose fifth parameter is a nonnull pointer. */ 168*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_5, ATTR_NONNULL, ATTR_LIST_5, \ 169*e4b17023SJohn Marino ATTR_NOTHROW_LIST) 170*e4b17023SJohn Marino/* Nothrow const functions whose pointer parameter(s) are all nonnull. */ 171*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL, ATTR_CONST, ATTR_NULL, \ 172*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL) 173*e4b17023SJohn Marino/* Nothrow const leaf functions whose pointer parameter(s) are all nonnull. */ 174*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL_LEAF, ATTR_CONST, ATTR_NULL, \ 175*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL_LEAF) 176*e4b17023SJohn Marino/* Nothrow const functions which are type-generic. */ 177*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC, ATTR_TYPEGENERIC, ATTR_NULL, \ 178*e4b17023SJohn Marino ATTR_CONST_NOTHROW_LIST) 179*e4b17023SJohn Marino/* Nothrow const leaf functions which are type-generic. */ 180*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF, ATTR_TYPEGENERIC, ATTR_NULL, \ 181*e4b17023SJohn Marino ATTR_CONST_NOTHROW_LEAF_LIST) 182*e4b17023SJohn Marino/* Nothrow pure functions whose pointer parameter(s) are all nonnull. */ 183*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL, ATTR_PURE, ATTR_NULL, \ 184*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL) 185*e4b17023SJohn Marino/* Nothrow pure leaf functions whose pointer parameter(s) are all nonnull. */ 186*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL_LEAF, ATTR_PURE, ATTR_NULL, \ 187*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL_LEAF) 188*e4b17023SJohn Marino/* Nothrow malloc functions whose pointer parameter(s) are all nonnull. */ 189*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL, ATTR_MALLOC, ATTR_NULL, \ 190*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL) 191*e4b17023SJohn Marino/* Nothrow malloc leaf functions whose pointer parameter(s) are all nonnull. */ 192*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL_LEAF, ATTR_MALLOC, ATTR_NULL, \ 193*e4b17023SJohn Marino ATTR_NOTHROW_NONNULL_LEAF) 194*e4b17023SJohn Marino 195*e4b17023SJohn Marino/* Construct a tree for a format attribute. */ 196*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE(TYPE, FA, VALUES) \ 197*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL, \ 198*e4b17023SJohn Marino ATTR_##TYPE, ATTR_LIST_##VALUES) \ 199*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT, \ 200*e4b17023SJohn Marino ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA) 201*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE_NOTHROW(TYPE, FA, VALUES) \ 202*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL, \ 203*e4b17023SJohn Marino ATTR_##TYPE, ATTR_LIST_##VALUES) \ 204*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\ 205*e4b17023SJohn Marino ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA) 206*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE_BOTH(TYPE, FA, VALUES) \ 207*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL, \ 208*e4b17023SJohn Marino ATTR_##TYPE, ATTR_LIST_##VALUES) \ 209*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT, \ 210*e4b17023SJohn Marino ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA) \ 211*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\ 212*e4b17023SJohn Marino ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA) 213*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(PRINTF,1,1_0) 214*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(PRINTF,1,1_2) 215*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_0) 216*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_3) 217*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_0) 218*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_4) 219*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_0) 220*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_5) 221*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_0) 222*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_6) 223*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(SCANF,1,1_0) 224*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(SCANF,1,1_2) 225*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_0) 226*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_3) 227*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(STRFTIME,3,3_0) 228*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(STRFMON,3,3_4) 229*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE 230*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE_NOTHROW 231*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE_BOTH 232*e4b17023SJohn Marino 233*e4b17023SJohn Marino/* Transactional memory variants of the above. */ 234*e4b17023SJohn Marino 235*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_LIST, 236*e4b17023SJohn Marino ATTR_TM_REGPARM, ATTR_NULL, ATTR_NOTHROW_LIST) 237*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_TMPURE_NOTHROW_LIST, 238*e4b17023SJohn Marino ATTR_TM_TMPURE, ATTR_NULL, ATTR_TM_NOTHROW_LIST) 239*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_PURE_TMPURE_NOTHROW_LIST, 240*e4b17023SJohn Marino ATTR_PURE, ATTR_NULL, ATTR_TM_TMPURE_NOTHROW_LIST) 241*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NORETURN_NOTHROW_LIST, 242*e4b17023SJohn Marino ATTR_TM_REGPARM, ATTR_NULL, ATTR_NORETURN_NOTHROW_LIST) 243*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_CONST_NOTHROW_LIST, 244*e4b17023SJohn Marino ATTR_TM_REGPARM, ATTR_NULL, ATTR_CONST_NOTHROW_LIST) 245*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_LIST, 246*e4b17023SJohn Marino ATTR_RETURNS_TWICE, ATTR_NULL, ATTR_TM_NOTHROW_LIST) 247*e4b17023SJohn Marino 248*e4b17023SJohn Marino/* Same attributes used for BUILT_IN_MALLOC except with TM_PURE thrown in. */ 249*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TMPURE_MALLOC_NOTHROW_LIST, 250*e4b17023SJohn Marino ATTR_TM_TMPURE, ATTR_NULL, ATTR_MALLOC_NOTHROW_LIST) 251*e4b17023SJohn Marino/* Same attributes used for BUILT_IN_FREE except with TM_PURE thrown in. */ 252*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LIST, 253*e4b17023SJohn Marino ATTR_TM_TMPURE, ATTR_NULL, ATTR_NOTHROW_LIST) 254*e4b17023SJohn Marino 255*e4b17023SJohn Marino/* Construct a tree for a format_arg attribute. */ 256*e4b17023SJohn Marino#define DEF_FORMAT_ARG_ATTRIBUTE(FA) \ 257*e4b17023SJohn Marino DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_##FA, ATTR_FORMAT_ARG, \ 258*e4b17023SJohn Marino ATTR_LIST_##FA, ATTR_NOTHROW_NONNULL_##FA) 259*e4b17023SJohn MarinoDEF_FORMAT_ARG_ATTRIBUTE(1) 260*e4b17023SJohn MarinoDEF_FORMAT_ARG_ATTRIBUTE(2) 261*e4b17023SJohn Marino#undef DEF_FORMAT_ARG_ATTRIBUTE 262*e4b17023SJohn Marino 263