]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR sanitizer/59258 (ubsan: ICE(segfault): stack-buffer-overflow with -fsanitize...
authorJakub Jelinek <jakub@redhat.com>
Tue, 26 Nov 2013 21:27:19 +0000 (22:27 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Nov 2013 21:27:19 +0000 (22:27 +0100)
PR sanitizer/59258
* ubsan.c (ubsan_source_location): Don't add any location
to ADDR_EXPR in the ctor.  Revert 2013-11-22 change.
(ubsan_create_data): Strip block info from LOC.

From-SVN: r205415

gcc/ChangeLog
gcc/ubsan.c

index 4f2edd445c00120d49678165fad072377bb950b8..3a18e50e6a8fdc38d00022e9ea0ea73e858b855e 100644 (file)
@@ -1,5 +1,10 @@
 2013-11-26  Jakub Jelinek  <jakub@redhat.com>
 
+       PR sanitizer/59258
+       * ubsan.c (ubsan_source_location): Don't add any location
+       to ADDR_EXPR in the ctor.  Revert 2013-11-22 change.
+       (ubsan_create_data): Strip block info from LOC.
+
        PR middle-end/59273
        * tree-vect-generic.c (optimize_vector_constructor): Don't optimize
        if there isn't optab handler for the corresponding vector PLUS_EXPR.
index a16f3eb097f1981b46c8365105b989bf6c23b35b..468a3b1b15060248bbc111976d55ff60d30302a4 100644 (file)
@@ -229,13 +229,13 @@ ubsan_source_location (location_t loc)
   xloc = expand_location (loc);
 
   /* Fill in the values from LOC.  */
-  size_t len = xloc.file ? strlen (xloc.file) : 0;
-  tree str = build_string (len + 1, xloc.file ? xloc.file : "");
+  size_t len = strlen (xloc.file);
+  tree str = build_string (len + 1, xloc.file);
   TREE_TYPE (str) = build_array_type (char_type_node,
                                      build_index_type (size_int (len)));
   TREE_READONLY (str) = 1;
   TREE_STATIC (str) = 1;
-  str = build_fold_addr_expr_loc (loc, str);
+  str = build_fold_addr_expr (str);
   tree ctor = build_constructor_va (type, 3, NULL_TREE, str, NULL_TREE,
                                    build_int_cst (unsigned_type_node,
                                                   xloc.line), NULL_TREE,
@@ -398,6 +398,7 @@ ubsan_create_data (const char *name, location_t loc,
   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);