https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85923

            Bug ID: 85923
           Summary: invalid code generation when incrementing pointer
                    referenced by pointer
           Product: gcc
           Version: 7.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sami.kantoluoto at embedtronics dot fi
  Target Milestone: ---

Created attachment 44181
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44181&action=edit
source code to trigger the bug

Hi,

It seems invalid code is generated when following code is used:

```
#define _S      0x08

extern const unsigned char * const * const _ctype_tab_ptr;

#define isspace(c)      ((int)((*_ctype_tab_ptr)[c] & _S))

int skipblk(const char **Ptr)
{
  int l;

  for (l = 0; isspace(**(unsigned char **)Ptr); l++) (*Ptr)++;

  return(l);
}
```

When compiled with

```
$ gcc -Wall -Wextra -Os -c skipblk.c -o skipblk.o
```

The following assembly is generated:
```
skipblk:
.LFB0:
        movq    (%rdi), %rdx
        movq    _ctype_tab_ptr(%rip), %rax
        leaq    1(%rdx), %r8
        movq    (%rax), %rsi
        xorl    %eax, %eax
.L2:
        movzbl  (%rdx), %ecx
        testb   $8, (%rsi,%rcx)
        je      .L5
        movq    %r8, (%rdi)
        incl    %eax
        jmp     .L2
.L5:
        ret
```

I'm not x86 assembly expert (anymore) but I read this that `%rdx` is never
incremented.

The bug is not x86 specific as equally invalid code (pointer is not
incremented) is generated by arm-none-eabi compiler also.

Bug is tested and detected with these compilers:
```
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3'
--with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr
--with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as
--with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie
--with-system-zlib --with-target-system-zlib --enable-objc-gc=auto
--enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none --without-cuda-driver
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) 
```

And:
```
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=/emb/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/work/emb/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/lto-wrapper
Target: arm-none-eabi
Configured with:
/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/src/gcc/configure
--target=arm-none-eabi
--prefix=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native
--libexecdir=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/lib
--infodir=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/share/doc/gcc-arm-none-eabi/info
--mandir=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/share/doc/gcc-arm-none-eabi/man
--htmldir=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/share/doc/gcc-arm-none-eabi/html
--pdfdir=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/share/doc/gcc-arm-none-eabi/pdf
--enable-languages=c,c++ --enable-plugins --disable-decimal-float
--disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath
--disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared
--disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib
--with-headers=yes --with-python-dir=share/gcc-arm-none-eabi
--with-sysroot=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/install-native/arm-none-eabi
--build=x86_64-linux-gnu --host=x86_64-linux-gnu
--with-gmp=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/build-native/host-libs/usr
--with-mpfr=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/build-native/host-libs/usr
--with-mpc=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/build-native/host-libs/usr
--with-isl=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/build-native/host-libs/usr
--with-libelf=/tmp/jenkins-GCC-6-buildandreg-223_20170621_1498033910/build-native/host-libs/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--with-pkgversion='GNU Tools for ARM Embedded Processors 6-2017-q2-update'
--with-multilib-list=rmprofile
Thread model: single
gcc version 6.3.1 20170620 (release) [ARM/embedded-6-branch revision 249437]
(GNU Tools for ARM Embedded Processors 6-2017-q2-update) 
```

And also:
```
arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=/emb/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/work/emb/gcc-arm-none-eabi-7-2017-q4-major/bin/../lib/gcc/arm-none-eabi/7.2.1/lto-wrapper
Target: arm-none-eabi
Configured with:
/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/src/gcc/configure
--target=arm-none-eabi
--prefix=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native
--libexecdir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/lib
--infodir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/share/doc/gcc-arm-none-eabi/info
--mandir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/share/doc/gcc-arm-none-eabi/man
--htmldir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/share/doc/gcc-arm-none-eabi/html
--pdfdir=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/share/doc/gcc-arm-none-eabi/pdf
--enable-languages=c,c++ --enable-plugins --disable-decimal-float
--disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath
--disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared
--disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib
--with-headers=yes --with-python-dir=share/gcc-arm-none-eabi
--with-sysroot=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/install-native/arm-none-eabi
--build=x86_64-linux-gnu --host=x86_64-linux-gnu
--with-gmp=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/build-native/host-libs/usr
--with-mpfr=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/build-native/host-libs/usr
--with-mpc=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/build-native/host-libs/usr
--with-isl=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/build-native/host-libs/usr
--with-libelf=/tmp/jenkins/jenkins-GCC-7-build_toolchain_docker-633_20171130_1512067137/build-native/host-libs/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--with-pkgversion='GNU Tools for Arm Embedded Processors 7-2017-q4-major'
--with-multilib-list=rmprofile
Thread model: single
gcc version 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
(GNU Tools for Arm Embedded Processors 7-2017-q4-major) 
```

Ancient gcc 4.6.4 generates good code:
```
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=/emb/arm-none-eabi-gcc-4.6.4/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/work/emb/arm-none-eabi-gcc-4.6.4/bin/../libexec/gcc/arm-none-eabi/4.6.4/lto-wrapper
Target: arm-none-eabi
Configured with: /tmp/gcc-4.6.4/configure --target=arm-none-eabi --with-gnu-as
--with-gcc --with-gnu-ld --enable-interwork --enable-multilib --disable-libssp
-with-float=soft --enable-languages=c --disable-libstdc
--disable-hosted-libstdcxx --disable-libstdcxx --disable-libstdcxx-v3
--disable-libstdcxx_v3 --disable-libffi --disable-libgomp --disable-libmudflap
--disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls
--disable-shared --disable-threads --enable-tls
--with-multilib-list=armv5,armv5t,armv6-m,armv7-m,armv7e-m,armv7-r
--prefix=/emb/arm-none-eabi-gcc-4.6.4 --program-prefix=arm-none-eabi- -v
Thread model: single
gcc version 4.6.4 (GCC) 
```

Reply via email to