aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <mpolacek@gcc.gnu.org>2016-12-09 19:05:28 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2016-12-09 19:05:28 +0000
commit59ab1319cb6664c39d8cf7f05bcf1ec0a625ecdb (patch)
tree50a12725ad9ecb098d20fe8e848e1ff15d368f00
parentc915eee640ea7fb26825b8e59a1d3c455b7c601a (diff)
downloadgcc-59ab1319cb6664c39d8cf7f05bcf1ec0a625ecdb.zip
gcc-59ab1319cb6664c39d8cf7f05bcf1ec0a625ecdb.tar.gz
gcc-59ab1319cb6664c39d8cf7f05bcf1ec0a625ecdb.tar.bz2
re PR middle-end/78750 (ICE in get_range_info, at tree-ssanames.c:375)
PR middle-end/78750 * builtins.c (check_sizes): Use POINTER_TYPE_P. * g++.dg/torture/pr78750.C: New. From-SVN: r243498
-rw-r--r--gcc/builtins.c2
-rw-r--r--gcc/testsuite/g++.dg/torture/pr78750.C10
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 20515e7..b056e12 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -3091,7 +3091,7 @@ check_sizes (int opt, tree exp, tree size, tree maxlen, tree str, tree objsize)
{
/* STR is normally a pointer to string but as a special case
it can be an integer denoting the length of a string. */
- if (TREE_CODE (TREE_TYPE (str)) == POINTER_TYPE)
+ if (POINTER_TYPE_P (TREE_TYPE (str)))
{
/* Try to determine the range of lengths the source string
refers to. If it can be determined add one to it for
diff --git a/gcc/testsuite/g++.dg/torture/pr78750.C b/gcc/testsuite/g++.dg/torture/pr78750.C
new file mode 100644
index 0000000..54232e6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr78750.C
@@ -0,0 +1,10 @@
+// PR middle-end/78750
+// { dg-do compile }
+
+extern "C" char *strcpy (char *, const char *);
+
+void
+fn (char *p, char &as)
+{
+ strcpy (p, &as);
+}