Package: g++-12 Version: 12.2.0-14 Severity: normal X-Debbugs-Cc: iv...@isle.spb.ru
Dear Maintainer, When I compile c++ code which has an error (method invoked on null class pointer) the following problem occurs: the actual call does not crash, since 'this' pointer is not really used in called method, but conditional below works incorrectly. Here's the simplified code in question: else { np = getstr(cp); if (!::strcasecmp(np, "info")) current = channel->get_class(ErrorCode::Info); else if (!::strcasecmp(np, "internal")) current = channel->get_class(ErrorCode::Internal); . . . . . . else { Log::Error("%s:%d: unrecognized error class [%s]", _fname, _lineno, np); current = 0; continue; } } if (!channel || !current) continue; np = getstr(cp); channel can be 0 after first 'else', but get_class() does not crash, since it just returns a computed pointer to array item inside the object, so that current is set to some invalid value like 0x120. It proceeds to the 'if (!channel || !current)' conditional and with given values (channel == 0, current == 0x120) continue should be executed. Instead the control falls through to the next line. This error occurs only when the code is compiled with -O2 or -O3. When -O0 is used, the conditional works properly. The error is not observed when compiled with g++-11. The error also dissappears when I fix my error (replace first 'else {' by 'else if (channel) {'). If this information is of any interest I can send combined c++/assembly listings for cases with and without optimization. Best regards, -- System Information: Debian Release: 12.0 APT prefers stable-security APT policy: (500, 'stable-security'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 5.10.0-23-amd64 (SMP w/2 CPU threads) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages g++-12 depends on: ii gcc-12 12.2.0-14 ii gcc-12-base 12.2.0-14 ii libc6 2.36-9 ii libgmp10 2:6.2.1+dfsg1-1.1 ii libisl23 0.25-1 ii libmpc3 1.3.1-1 ii libmpfr6 4.2.0-1 ii libstdc++-12-dev 12.2.0-14 ii libzstd1 1.5.4+dfsg2-5 ii zlib1g 1:1.2.13.dfsg-1 g++-12 recommends no packages. Versions of packages g++-12 suggests: pn g++-12-multilib <none> pn gcc-12-doc <none> -- no debconf information