diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-03-26 19:33:40 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-03-26 19:33:40 +0000 |
commit | d4d068c0658a2e72c547da0208564ba4d526c51d (patch) | |
tree | 7671e1cf802c65b5fe7f9759f0228d4c032719aa /gcc/ubsan.c | |
parent | 58e9c2b3d0669e196aecf7b00287dc78f2417127 (diff) | |
download | gcc-d4d068c0658a2e72c547da0208564ba4d526c51d.tar.gz |
* ubsan.h (ubsan_create_data): Change second argument's type
to const location_t *.
* ubsan.c (ubsan_source_location): If xloc.file is NULL, set it to
_("<unknown>").
(ubsan_create_data): Change second argument to const location_t *PLOC.
Create Loc field whenever PLOC is non-NULL.
(ubsan_instrument_unreachable, ubsan_expand_null_ifn,
ubsan_build_overflow_builtin, instrument_bool_enum_load): Adjust
callers.
c-family/
* c-ubsan.c (ubsan_instrument_division, ubsan_instrument_shift,
ubsan_instrument_vla, ubsan_instrument_return): Adjust
ubsan_create_data callers.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208849 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ubsan.c')
-rw-r--r-- | gcc/ubsan.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 8a8c289aa23..ac40c85f56b 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-ssanames.h" #include "asan.h" #include "gimplify-me.h" +#include "intl.h" /* Map from a tree to a VAR_DECL tree. */ @@ -238,6 +239,8 @@ ubsan_source_location (location_t loc) tree type = ubsan_source_location_type (); xloc = expand_location (loc); + if (xloc.file == NULL) + xloc.file = "<unknown>"; /* Fill in the values from LOC. */ size_t len = strlen (xloc.file); @@ -404,7 +407,7 @@ ubsan_type_descriptor (tree type, bool want_pointer_type_p) pointer checking. */ tree -ubsan_create_data (const char *name, location_t loc, +ubsan_create_data (const char *name, const location_t *ploc, const struct ubsan_mismatch_data *mismatch, ...) { va_list args; @@ -412,17 +415,18 @@ ubsan_create_data (const char *name, location_t loc, tree fields[5]; vec<tree, va_gc> *saved_args = NULL; size_t i = 0; + location_t loc = UNKNOWN_LOCATION; /* Firstly, create a pointer to type descriptor type. */ tree td_type = ubsan_type_descriptor_type (); TYPE_READONLY (td_type) = 1; td_type = build_pointer_type (td_type); - loc = LOCATION_LOCUS (loc); /* Create the structure type. */ ret = make_node (RECORD_TYPE); - if (loc != UNKNOWN_LOCATION) + if (ploc != NULL) { + loc = LOCATION_LOCUS (*ploc); fields[i] = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE, ubsan_source_location_type ()); DECL_CONTEXT (fields[i]) = ret; @@ -481,7 +485,7 @@ ubsan_create_data (const char *name, location_t loc, tree ctor = build_constructor (ret, v); /* If desirable, set the __ubsan_source_location element. */ - if (loc != UNKNOWN_LOCATION) + if (ploc != NULL) CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, ubsan_source_location (loc)); size_t nelts = vec_safe_length (saved_args); @@ -513,7 +517,7 @@ tree ubsan_instrument_unreachable (location_t loc) { initialize_sanitizer_builtins (); - tree data = ubsan_create_data ("__ubsan_unreachable_data", loc, NULL, + tree data = ubsan_create_data ("__ubsan_unreachable_data", &loc, NULL, NULL_TREE); tree t = builtin_decl_explicit (BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE); return build_call_expr_loc (loc, t, 1, build_fold_addr_expr_loc (loc, data)); @@ -583,7 +587,7 @@ ubsan_expand_null_ifn (gimple_stmt_iterator gsi) const struct ubsan_mismatch_data m = { build_zero_cst (pointer_sized_int_node), ckind }; tree data = ubsan_create_data ("__ubsan_null_data", - loc, &m, + &loc, &m, ubsan_type_descriptor (TREE_TYPE (ptr), true), NULL_TREE); data = build_fold_addr_expr_loc (loc, data); @@ -658,7 +662,7 @@ tree ubsan_build_overflow_builtin (tree_code code, location_t loc, tree lhstype, tree op0, tree op1) { - tree data = ubsan_create_data ("__ubsan_overflow_data", loc, NULL, + tree data = ubsan_create_data ("__ubsan_overflow_data", &loc, NULL, ubsan_type_descriptor (lhstype, false), NULL_TREE); enum built_in_function fn_code; @@ -841,7 +845,7 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi) update_stmt (stmt); tree data = ubsan_create_data ("__ubsan_invalid_value_data", - loc, NULL, + &loc, NULL, ubsan_type_descriptor (type, false), NULL_TREE); data = build_fold_addr_expr_loc (loc, data); |