11debfc3dSmrg /* UndefinedBehaviorSanitizer, undefined behavior detector. 2*8feb0f0bSmrg Copyright (C) 2013-2020 Free Software Foundation, Inc. 31debfc3dSmrg Contributed by Marek Polacek <polacek@redhat.com> 41debfc3dSmrg 51debfc3dSmrg This file is part of GCC. 61debfc3dSmrg 71debfc3dSmrg GCC is free software; you can redistribute it and/or modify it under 81debfc3dSmrg the terms of the GNU General Public License as published by the Free 91debfc3dSmrg Software Foundation; either version 3, or (at your option) any later 101debfc3dSmrg version. 111debfc3dSmrg 121debfc3dSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY 131debfc3dSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or 141debfc3dSmrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 151debfc3dSmrg for more details. 161debfc3dSmrg 171debfc3dSmrg You should have received a copy of the GNU General Public License 181debfc3dSmrg along with GCC; see the file COPYING3. If not see 191debfc3dSmrg <http://www.gnu.org/licenses/>. */ 201debfc3dSmrg 211debfc3dSmrg #ifndef GCC_UBSAN_H 221debfc3dSmrg #define GCC_UBSAN_H 231debfc3dSmrg 241debfc3dSmrg /* The various kinds of NULL pointer checks. */ 251debfc3dSmrg enum ubsan_null_ckind { 261debfc3dSmrg UBSAN_LOAD_OF, 271debfc3dSmrg UBSAN_STORE_OF, 281debfc3dSmrg UBSAN_REF_BINDING, 291debfc3dSmrg UBSAN_MEMBER_ACCESS, 301debfc3dSmrg UBSAN_MEMBER_CALL, 311debfc3dSmrg UBSAN_CTOR_CALL, 321debfc3dSmrg UBSAN_DOWNCAST_POINTER, 331debfc3dSmrg UBSAN_DOWNCAST_REFERENCE, 341debfc3dSmrg UBSAN_UPCAST, 351debfc3dSmrg UBSAN_CAST_TO_VBASE 361debfc3dSmrg }; 371debfc3dSmrg 381debfc3dSmrg /* This controls how ubsan prints types. Used in ubsan_type_descriptor. */ 391debfc3dSmrg enum ubsan_print_style { 401debfc3dSmrg UBSAN_PRINT_NORMAL, 411debfc3dSmrg UBSAN_PRINT_POINTER, 421debfc3dSmrg UBSAN_PRINT_ARRAY 431debfc3dSmrg }; 441debfc3dSmrg 451debfc3dSmrg /* This controls ubsan_encode_value behavior. */ 461debfc3dSmrg enum ubsan_encode_value_phase { 471debfc3dSmrg UBSAN_ENCODE_VALUE_GENERIC, 481debfc3dSmrg UBSAN_ENCODE_VALUE_GIMPLE, 491debfc3dSmrg UBSAN_ENCODE_VALUE_RTL 501debfc3dSmrg }; 511debfc3dSmrg 521debfc3dSmrg extern bool ubsan_expand_bounds_ifn (gimple_stmt_iterator *); 531debfc3dSmrg extern bool ubsan_expand_null_ifn (gimple_stmt_iterator *); 541debfc3dSmrg extern bool ubsan_expand_objsize_ifn (gimple_stmt_iterator *); 55a2dc1f3fSmrg extern bool ubsan_expand_ptr_ifn (gimple_stmt_iterator *); 561debfc3dSmrg extern bool ubsan_expand_vptr_ifn (gimple_stmt_iterator *); 571debfc3dSmrg extern bool ubsan_instrument_unreachable (gimple_stmt_iterator *); 581debfc3dSmrg extern tree ubsan_create_data (const char *, int, const location_t *, ...); 591debfc3dSmrg extern tree ubsan_type_descriptor (tree, ubsan_print_style 601debfc3dSmrg = UBSAN_PRINT_NORMAL); 611debfc3dSmrg extern tree ubsan_encode_value (tree, ubsan_encode_value_phase 621debfc3dSmrg = UBSAN_ENCODE_VALUE_GENERIC); 631debfc3dSmrg extern bool is_ubsan_builtin_p (tree); 641debfc3dSmrg extern tree ubsan_build_overflow_builtin (tree_code, location_t, tree, tree, 651debfc3dSmrg tree, tree *); 661debfc3dSmrg extern tree ubsan_instrument_float_cast (location_t, tree, tree); 671debfc3dSmrg extern tree ubsan_get_source_location_type (void); 681debfc3dSmrg 691debfc3dSmrg #endif /* GCC_UBSAN_H */ 70