This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix for PR64741 (UBSan/ASan integration)


Hi all,

As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64741 , ASan may currently report false positives for UBSan internal variables due to their incomplete type information. This patch fixes this.

Bootstrapped and regtested on Linux x64. Ok to commit?

-Y
commit cf083510ece7b7bde1ab5a41e293b5a6a5bb4550
Author: Yury Gribov <y.gribov@samsung.com>
Date:   Mon Jan 26 10:19:03 2015 +0300

    2015-01-26  Yury Gribov  <y.gribov@samsung.com>
    
    	PR ubsan/64741
    
    	* ubsan.c (ubsan_type_descriptor): Update type size.

diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index a9df290..7031572 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -504,6 +504,14 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
   tinfo = get_ubsan_type_info_for_type (type);
 
   /* Create a new VAR_DECL of type descriptor.  */
+  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;
+
   char tmp_name[32];
   static unsigned int type_var_id_num;
   ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_type", type_var_id_num++);
@@ -514,14 +522,12 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
   DECL_ARTIFICIAL (decl) = 1;
   DECL_IGNORED_P (decl) = 1;
   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,
 				    build_int_cst (short_unsigned_type_node,
 						   tkind), NULL_TREE,

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]