https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67584
Bug ID: 67584 Summary: Compilation is fine if an undeclared identifier is used in a for range-based loop, and lsh has the same name as rhs Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tony at becrux dot com Target Milestone: --- GCC does not fail in compiling the following code: #include <vector> class A : public std::vector< int > { public: A(int x) : std::vector< int >(x) { } }; int main(int, char **) { for (A v : v) { } return 0; } "A" class has been declared just to "trick" the vector behavior (i.e. remove the explicit constructor) and fool the compiler. Command-line used for compilation: g++ -v -save-temps -std=c++11 -Wall -Wextra -pedantic -o for_bug.exe for_bug.cpp No warning is generated. I've tested 5.2 too, and older version of GCC (4.8 and 4.7 series), the result is always the same (using an online compiler). Clang and ICC behave correctly, i.e. compilation fails cause "v" is an undeclared identifier (using an online compiler). GCC version used for test is 5.1.0, MinGW-w64, Windows 7 64 bit. The produced executable crashes during execution. Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/lto-wrapper.exe Target: i686-w64-mingw32 Configured with: ../../../src/gcc-5.1.0/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-sjlj-exceptions --disable-isl-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=i686 --with-libiconv --with-system-zlib --with-gmp=/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static --with-mpfr=/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static --with-mpc=/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static --with-isl=/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static --with-pkgversion='i686-win32-sjlj, Built by Antonio Di Monaco' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -march=i686 -mtune=i686 -mthreads -I/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32/opt/include -I/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-zlib-static/include -I/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -march=i686 -mtune=i686 -mthreads -I/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32/opt/include -I/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-zlib-static/include -I/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32/opt/lib -L/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-zlib-static/lib -L/home/Tony/mingw-gcc-5.1.0/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware' Thread model: win32 gcc version 5.1.0 (i686-win32-sjlj, Built by Antonio Di Monaco) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++11' '-Wall' '-Wextra' '-Wpedantic' '-o' 'for_bug.exe' '-shared-libgcc' '-mtune=i686' '-march=i686' C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/cc1plus.exe -E -quiet -v -iprefix C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/ -U_REENTRANT for_bug.cpp -mtune=i686 -march=i686 -std=c++11 -Wall -Wextra -Wpedantic -fpch-preprocess -o for_bug.ii ignoring duplicate directory "C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../lib/gcc/i686-w64-mingw32/5.1.0/include" ignoring nonexistent directory "C:/msys32/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32C:/msys32/mingw32/lib/gcc/i686-w64-mingw32/5.1.0/../../../../include" ignoring duplicate directory "C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../lib/gcc/i686-w64-mingw32/5.1.0/include-fixed" ignoring duplicate directory "C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/include" ignoring nonexistent directory "C:/msys32/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32/mingw/include" #include "..." search starts here: #include <...> search starts here: C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/include C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/include-fixed C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/include C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../i686-w64-mingw32/include/c++ C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../i686-w64-mingw32/include/c++/i686-w64-mingw32 C:/i686-510-win32-sjlj-rt_v4/lib/gcc/../../i686-w64-mingw32/include/c++/backward End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++11' '-Wall' '-Wextra' '-Wpedantic' '-o' 'for_bug.exe' '-shared-libgcc' '-mtune=i686' '-march=i686' C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/cc1plus.exe -fpreprocessed for_bug.ii -quiet -dumpbase for_bug.cpp -mtune=i686 -march=i686 -auxbase for_bug -Wall -Wextra -Wpedantic -std=c++11 -version -o for_bug.s GNU C++11 (i686-win32-sjlj, Built by Antonio Di Monaco) version 5.1.0 (i686-w64-mingw32) compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.2-p11, MPC version 1.0.3 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C++11 (i686-win32-sjlj, Built by Antonio Di Monaco) version 5.1.0 (i686-w64-mingw32) compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.2-p11, MPC version 1.0.3 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: cd26162daf8c5b33311803309ba41a5d COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++11' '-Wall' '-Wextra' '-Wpedantic' '-o' 'for_bug.exe' '-shared-libgcc' '-mtune=i686' '-march=i686' C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/bin/as.exe -v -o for_bug.o for_bug.s GNU assembler version 2.25 (i686-w64-mingw32) using BFD version (GNU Binutils) 2.25 COMPILER_PATH=C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/;C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/bin/ LIBRARY_PATH=C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/lib/../lib/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../lib/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/lib/;C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++11' '-Wall' '-Wextra' '-Wpedantic' '-o' 'for_bug.exe' '-shared-libgcc' '-mtune=i686' '-march=i686' C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/collect2.exe -plugin C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/liblto_plugin-0.dll -plugin-opt=C:/i686-510-win32-sjlj-rt_v4/bin/../libexec/gcc/i686-w64-mingw32/5.1.0/lto-wrapper.exe -plugin-opt=-fresolution=for_bug.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/msys32/home/Tony/mingw-gcc-5.1.0/i686-510-win32-sjlj-rt_v4/mingw32 -m i386pe -Bdynamic -o for_bug.exe C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/lib/../lib/crt2.o C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/crtbegin.o -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0 -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/lib/../lib -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../lib -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../../../i686-w64-mingw32/lib -LC:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/../../.. for_bug.o -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt C:/i686-510-win32-sjlj-rt_v4/bin/../lib/gcc/i686-w64-mingw32/5.1.0/crtend.o