diff options
author | Marek Polacek <polacek@redhat.com> | 2014-01-08 10:06:09 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2014-01-08 10:06:09 +0000 |
commit | 06636b3267e8753b7303b68f935a1913d7df8024 (patch) | |
tree | 279373eadb7cecf9b799de81cfd362caae48952c /gcc | |
parent | c15677b61c637e7dca61eda426c2d7163695dc1d (diff) | |
download | gcc-06636b3267e8753b7303b68f935a1913d7df8024.zip gcc-06636b3267e8753b7303b68f935a1913d7df8024.tar.gz gcc-06636b3267e8753b7303b68f935a1913d7df8024.tar.bz2 |
re PR sanitizer/59667 (ubsan: ICE ubsan_type_descriptor)
PR sanitizer/59667
* ubsan.c (ubsan_type_descriptor): Call strip_array_types on type2.
testsuite/
* c-c++-common/ubsan/pr59667.c: New test.
From-SVN: r206423
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/ubsan/pr59667.c | 15 | ||||
-rw-r--r-- | gcc/ubsan.c | 3 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8888a79..5ff7cd0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR sanitizer/59667 + * ubsan.c (ubsan_type_descriptor): Call strip_array_types on type2. + 2014-01-08 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/59649 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d113f2a..f9111f9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR sanitizer/59667 + * c-c++-common/ubsan/pr59667.c: New test. + 2014-01-08 Richard Biener <rguenther@suse.de> PR middle-end/59630 diff --git a/gcc/testsuite/c-c++-common/ubsan/pr59667.c b/gcc/testsuite/c-c++-common/ubsan/pr59667.c new file mode 100644 index 0000000..367e303 --- /dev/null +++ b/gcc/testsuite/c-c++-common/ubsan/pr59667.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined" } */ +/* { dg-shouldfail "ubsan" } */ +/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ + +int +main (void) +{ + unsigned int len = 1; + float (*P)[len][len] = 0; + (*P)[0][0] = 1; + return 0; +} + +/* { dg-output "store to null pointer of type 'float'(\n|\r\n|\r)" } */ diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 7cc8c18..1841a94 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -311,6 +311,9 @@ ubsan_type_descriptor (tree type, bool want_pointer_type_p) type2 = TYPE_METHOD_BASETYPE (type2); } + /* If an array, get its type. */ + type2 = strip_array_types (type2); + if (TYPE_NAME (type2) != NULL) { if (TREE_CODE (TYPE_NAME (type2)) == IDENTIFIER_NODE) |