Commit f4bdb96a by Jakub Jelinek Committed by Yury Gribov

re PR sanitizer/64741 (Incorrect size of UBSan type descriptors)

2015-01-27  Jakub Jelinek  <jakub@redhat.com>
	    Yury Gribov  <y.gribov@samsung.com>

	PR ubsan/64741
	* ubsan.c (ubsan_source_location): Refactor code.
	(ubsan_type_descriptor): Update type size. Refactor code.

Co-Authored-By: Yury Gribov <y.gribov@samsung.com>

From-SVN: r220159
parent d9c16466
2015-01-27 Jakub Jelinek <jakub@redhat.com>
Yury Gribov <y.gribov@samsung.com>
PR ubsan/64741
* ubsan.c (ubsan_source_location): Refactor code.
(ubsan_type_descriptor): Update type size. Refactor code.
2015-01-27 Richard Biener <rguenther@suse.de> 2015-01-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/56273 PR tree-optimization/56273
......
...@@ -328,10 +328,9 @@ ubsan_source_location (location_t loc) ...@@ -328,10 +328,9 @@ ubsan_source_location (location_t loc)
else else
{ {
/* Fill in the values from LOC. */ /* Fill in the values from LOC. */
size_t len = strlen (xloc.file); size_t len = strlen (xloc.file) + 1;
str = build_string (len + 1, xloc.file); str = build_string (len, xloc.file);
TREE_TYPE (str) = build_array_type (char_type_node, TREE_TYPE (str) = build_array_type_nelts (char_type_node, len);
build_index_type (size_int (len)));
TREE_READONLY (str) = 1; TREE_READONLY (str) = 1;
TREE_STATIC (str) = 1; TREE_STATIC (str) = 1;
str = build_fold_addr_expr (str); str = build_fold_addr_expr (str);
...@@ -504,6 +503,13 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle) ...@@ -504,6 +503,13 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
tinfo = get_ubsan_type_info_for_type (type); tinfo = get_ubsan_type_info_for_type (type);
/* Create a new VAR_DECL of type descriptor. */ /* Create a new VAR_DECL of type descriptor. */
const char *tmp = pp_formatted_text (&pretty_name);
size_t len = strlen (tmp) + 1;
tree str = build_string (len, tmp);
TREE_TYPE (str) = build_array_type_nelts (char_type_node, len);
TREE_READONLY (str) = 1;
TREE_STATIC (str) = 1;
char tmp_name[32]; char tmp_name[32];
static unsigned int type_var_id_num; static unsigned int type_var_id_num;
ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_type", type_var_id_num++); ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_type", type_var_id_num++);
...@@ -514,14 +520,12 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle) ...@@ -514,14 +520,12 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
DECL_ARTIFICIAL (decl) = 1; DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1; DECL_IGNORED_P (decl) = 1;
DECL_EXTERNAL (decl) = 0; DECL_EXTERNAL (decl) = 0;
DECL_SIZE (decl)
= size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (TREE_TYPE (str)));
DECL_SIZE_UNIT (decl)
= size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl),
TYPE_SIZE_UNIT (TREE_TYPE (str)));
const char *tmp = pp_formatted_text (&pretty_name);
size_t len = strlen (tmp);
tree str = build_string (len + 1, tmp);
TREE_TYPE (str) = build_array_type (char_type_node,
build_index_type (size_int (len)));
TREE_READONLY (str) = 1;
TREE_STATIC (str) = 1;
tree ctor = build_constructor_va (dtype, 3, NULL_TREE, tree ctor = build_constructor_va (dtype, 3, NULL_TREE,
build_int_cst (short_unsigned_type_node, build_int_cst (short_unsigned_type_node,
tkind), NULL_TREE, tkind), NULL_TREE,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment