#1023756 gcc-12: Miscompilation of attached test files, gcc-11 ok

Package:
gcc-12
Source:
gcc-12
Description:
GNU C compiler
Submitter:
Camm Maguire
Date:
2023-01-08 08:21:02 UTC
Severity:
normal
#1023756#5
Date:
2022-11-09 17:02:18 UTC
From:
To:
This prevents GCL using gcc-12.....


=============================================================================
File: t.c
=============================================================================
#include <stdio.h>

#define fixnum long
#define ufixnum unsigned long

fixnum
foo(fixnum i,fixnum x) {

  printf("foo\n");
  return x;

}

fixnum
bar(fixnum x) {

  printf("bar\n");
  return x;

}

struct fixn {
  fixnum d;
  fixnum FIXVAL;
};

union lu {
  struct fixn FIX;
};

typedef union lu *object;

extern object fixnum_add(fixnum,fixnum);
extern object make_fixnum1(fixnum);

object
baz(object x) {
  {
    fixnum fx=({register object _q2=(x);
	       register fixnum _q3;
	       _q3=(((ufixnum)(_q2))>=0x8000000000000000) ?
		 ((fixnum)(((fixnum)(_q2))-(0x8000000000000000 +(0x4000000000000000>>1)))) :
		 (_q2)->FIX.FIXVAL;
	       _q3;});
    return fx==( - ((long)((((unsigned long)1)<<((8*8)-1))-1)) - 1 ) ?
      fixnum_add(1,((long)((((unsigned long)1)<<((8*8)-1))-1))) :
      (fx<0 ?
       ({register fixnum _q1=(-fx);
	 register object _q4;
	 _q4=(!(((_q1)+(0x4000000000000000>>1))&-0x4000000000000000)) ?
	   ((object)((_q1)+(0x8000000000000000 +(0x4000000000000000>>1)))) :
	   make_fixnum1(_q1);
	 _q4;}) :
       x);
  }
}


int
main(int argc,char * argv[]) {

  fixnum fx;
  union lu u;

  sscanf(argv[1],"%ld",&fx);
  u.FIX.FIXVAL=fx;

  printf("%p\n",baz(&u));

  return 0;

}
=============================================================================
File: tt.c
=============================================================================
#include <stdio.h>

#define fixnum long

struct fixn {
  fixnum d;
  fixnum FIXVAL;
};

union lu {
  struct fixn FIX;
};

typedef union lu *object;

object
fixnum_add(fixnum x,fixnum y) {
  static union lu u;
  u.FIX.FIXVAL=1;
  printf("add\n");
  return &u;
}

object
make_fixnum1(fixnum x) {
  static union lu u;
  u.FIX.FIXVAL=x;
  printf("make\n");
  return &u;
}
=============================================================================
Transcript:
=============================================================================
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -c -g -ffile-prefix-map=/home/camm/gcl-2.6.12=. -fstack-protector-strong -Wformat -Werror=format-security -fsigned-char -pipe -fcommon -fno-builtin-malloc -fno-builtin-free -fno-PIE -fno-pie -fno-PIC -fno-pic -Wall -Wno-empty-body -Wno-unused-but-set-variable  -I/usr/include/tirpc -pg -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -I/home/camm/gcl-2.6.12/o -I../h -I../gcl-tk tt.c
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -c -g -ffile-prefix-map=/home/camm/gcl-2.6.12=. -fstack-protector-strong -Wformat -Werror=format-security -fsigned-char -pipe -fcommon -fno-builtin-malloc -fno-builtin-free -fno-PIE -fno-pie -fno-PIC -fno-pic -Wall -Wno-empty-body -Wno-unused-but-set-variable  -I/usr/include/tirpc -pg -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -I/home/camm/gcl-2.6.12/o -I../h -I../gcl-tk t.c
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -Wl,-no-pie t.o tt.o -o t
(sid_amd64-dchroot)camm@barriere:~$ ./t -8874444426961747968
0x1b285c3000000000
(sid_amd64-dchroot)camm@barriere:~$ gcc-11 -c -g -ffile-prefix-map=/home/camm/gcl-2.6.12=. -fstack-protector-strong -Wformat -Werror=format-security -fsigned-char -pipe -fcommon -fno-builtin-malloc -fno-builtin-free -fno-PIE -fno-pie -fno-PIC -fno-pic -Wall -Wno-empty-body -Wno-unused-but-set-variable  -I/usr/include/tirpc -pg -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -I/home/camm/gcl-2.6.12/o -I../h -I../gcl-tk t.c
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -Wl,-no-pie t.o tt.o -o t
(sid_amd64-dchroot)camm@barriere:~$ ./t -8874444426961747968
make
0x404050
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -c -g -ffile-prefix-map=/home/camm/gcl-2.6.12=. -fstack-protector-strong -Wformat -Werror=format-security -fsigned-char -pipe -fcommon -fno-builtin-malloc -fno-builtin-free -fno-PIE -fno-pie -fno-PIC -fno-pic -Wall -Wno-empty-body -Wno-unused-but-set-variable  -I/usr/include/tirpc -pg -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -I/home/camm/gcl-2.6.12/o -I../h -I../gcl-tk t.c
(sid_amd64-dchroot)camm@barriere:~$ gcc-12 -Wl,-no-pie t.o tt.o -o t
(sid_amd64-dchroot)camm@barriere:~$ ./t -8874444426961747968
0x1b285c3000000000
=============================================================================

#1023756#10
Date:
2023-01-08 08:16:51 UTC
From:
To:
Please could you prepare a self-contained test case, either adding the required
included files, or providing the preprocessed source?

Also, please with the recent GCC 11, 12 versions in unstable, and the GCC 13
snapshot in experimental.