diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d420310e07310076aa063cf5b9b11c08ebbe081d..342c69b124073ad17688d3e6e8e86da1a130c0c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-06-26 Richard Biener <rguenther@suse.de> + + PR middle-end/86271 + * fold-const.c (fold_convertible_p): Pointer extension + isn't valid. + 2018-06-26 Alexandre Oliva <aoliva@redhat.com> PR debug/86064 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 4568e1e2b5744cf7a2f8895422cafa5a0a509bba..8476c223e4f2de35f7a4c1773d81eb65d3a97dba 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2358,7 +2358,9 @@ fold_convertible_p (const_tree type, const_tree arg) case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: case POINTER_TYPE: case REFERENCE_TYPE: case OFFSET_TYPE: - return (INTEGRAL_TYPE_P (orig) || POINTER_TYPE_P (orig) + return (INTEGRAL_TYPE_P (orig) + || (POINTER_TYPE_P (orig) + && TYPE_PRECISION (type) <= TYPE_PRECISION (orig)) || TREE_CODE (orig) == OFFSET_TYPE); case REAL_TYPE: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5d5ed667afc715e4b2135f89c17fb5afeb9e9acf..eb782ff5dd67ed53365eb26f3b2fa4a7c9e430eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-06-26 Richard Biener <rguenther@suse.de> + + PR middle-end/86271 + * gcc.dg/pr86271.c: New testcase. + 2018-06-26 Alexandre Oliva <aoliva@redhat.com> PR debug/86064 diff --git a/gcc/testsuite/gcc.dg/pr86271.c b/gcc/testsuite/gcc.dg/pr86271.c new file mode 100644 index 0000000000000000000000000000000000000000..1200533d4d97884f39258f755adbf5d928b79e18 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr86271.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int main () +{ + int i; + foobar (i, &i); /* { dg-warning "implicit declaration" } */ +} + +int foobar (int a, long long b) +{ + int c; + + c = a % b; + a = a / b; + return a + b; +}