Paranoider Deutschenmoerder kommt in Psychiatrie
Lese selbst: http://brandenburg.rz.fhtw-berlin.de/poetschke.html
[Bug c++/44920] New: const rvalue cast results in internal compiler error
>Submitter-Id:net >Originator:William S Fulton >Organization: >Confidential:no >Synopsis:const rvalue cast results in internal compiler error >Severity:serious >Priority:medium >Category: >Class:ice-on-legal-code >Release:gcc-4.5 (GCC) 4.5.0 >Environment: System: Linux caracal 2.6.27-16-generic #1 SMP Tue Dec 1 17:56:54 UTC 2009 i686 GNU/Linux host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ./configure --program-suffix=-4.5 >Description: A rvalue cast involving a const gives internal compiler error >How-To-Repeat: $ g++-4.5 -E -std=gnu++0x runme.cxx # 1 "runme.cxx" # 1 "" # 1 "" # 1 "runme.cxx" class A { public: void set(const int &&a) { _a = a; } private: int _a; }; template T Copy(const T& t) { return T(t); }; void doit() { A a; A *arg1 = (A *) &a; int arg2 = 0 ; (arg1)->set((const int&&)Copy(arg2)); } int main () { doit(); return 0; } $ g++-4.5 -std=gnu++0x runme.cxx runme.cxx: In function void doit(): runme.cxx:22:48: internal compiler error: in cp_build_c_cast, at cp/typeck.c:6308 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. >Fix: Remove the cast replacing: (arg1)->set((const int&&)Copy(arg2)); with: (arg1)->set(Copy(arg2)); Note (fix 2): if 'const int' is replaced with 'int' everywhere, everything works fine. -- Summary: const rvalue cast results in internal compiler error Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: wsf at fultondesigns dot co dot uk GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44920
[Bug c++/34822] New: Compiler seg fault with incorrect templated static member variable initialization
Testcase (runme.cxx): template struct DiffImContainer { int id; static short xyz; }; template short DiffImContainer::xyz = 0; int main() { DiffImContainer d; d.id = 20; return 0; } [EMAIL PROTECTED]:~/temp/compile$ gcc-4.2 -v -save-temps runme.cxx Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu Thread model: posix gcc version 4.2.1 (Ubuntu 4.2.1-5ubuntu4) /usr/lib/gcc/i486-linux-gnu/4.2.1/cc1plus -E -quiet -v -D_GNU_SOURCE runme.cxx -mtune=generic -fpch-preprocess -o runme.ii ignoring nonexistent directory "/usr/local/include/i486-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/i486-linux-gnu/4.2.1/../../../../i486-linux-gnu/include" ignoring nonexistent directory "/usr/include/i486-linux-gnu" #include "..." search starts here: #include <...> search starts here: /usr/include/c++/4.2 /usr/include/c++/4.2/i486-linux-gnu /usr/include/c++/4.2/backward /usr/local/include /usr/lib/gcc/i486-linux-gnu/4.2.1/include /usr/include End of search list. /usr/lib/gcc/i486-linux-gnu/4.2.1/cc1plus -fpreprocessed runme.ii -quiet -dumpbase runme.cxx -mtune=generic -auxbase runme -version -fstack-protector -fstack-protector -o runme.s GNU C++ version 4.2.1 (Ubuntu 4.2.1-5ubuntu4) (i486-linux-gnu) compiled by GNU C version 4.2.1 (Ubuntu 4.2.1-5ubuntu4). GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=129454 Compiler executable checksum: 44e55ae5d2724830dee11801424b84d8 runme.cxx:11: internal compiler error: in import_export_decl, at cp/decl2.c:1962 Please submit a full bug report, with preprocessed source if appropriate. See http://gcc.gnu.org/bugs.html> for instructions. For Debian GNU/Linux specific bug reporting instructions, see . [EMAIL PROTECTED]:~/temp/compile$ If template short DiffImContainer::xyz = 0; is corrected to: template short DiffImContainer::xyz = 0; then everything is okay. -- Summary: Compiler seg fault with incorrect templated static member variable initialization Product: gcc Version: 4.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: wsf at fultondesigns dot co dot uk http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34822
[Bug c++/114385] New: -Wrestrict false positive creating std::string from iterators
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114385 Bug ID: 114385 Summary: -Wrestrict false positive creating std::string from iterators Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: wsf at fultondesigns dot co.uk Target Milestone: --- Observed in gcc-13.1.0, 13.2.0, gcc-14 (gcc-trunk-20240318). Minimal testcase: #include template< class String_type > String_type substitute_esc_chars( typename String_type::const_iterator begin, typename String_type::const_iterator end ) { if( end - begin < 2 ) return String_type( begin, end ); //if( end - begin < 2 ) return String_type(1, *begin); // workaround 1 //if( end - begin == 0 || end - begin == 1 ) return String_type( begin, end ); // workaround 2 String_type result; result.resize( end - begin ); std::copy(begin, end, result.begin()); return result; } int main() { std::string ss[] = {"hi", "a"}; for (const std::string& s : ss) substitute_esc_chars(s.begin(), s.end()); return 0; } gcc-13.1 version info... $ g++-13 -Wall -O1 -D_GLIBCXX_ASSERTIONS runme.cxx -o runme In file included from /usr/include/c++/13/string:42, from runme.cxx:1: In static member function ‘static std::char_traits::char_type* std::char_traits::copy(char_type*, const char_type*, std::size_t)’, inlined from ‘static void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_S_copy(_CharT*, const _CharT*, size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]’ at /usr/include/c++/13/bits/basic_string.h:420:21, inlined from ‘static void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_S_copy_chars(_CharT*, const _CharT*, const _CharT*) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]’ at /usr/include/c++/13/bits/basic_string.h:474:16, inlined from ‘static void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_S_copy_chars(_CharT*, const_iterator, const_iterator) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]’ at /usr/include/c++/13/bits/basic_string.h:463:22, inlined from ‘void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag) [with _FwdIterator = __gnu_cxx::__normal_iterator >; _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]’ at /usr/include/c++/13/bits/basic_string.tcc:243:21, inlined from ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = __gnu_cxx::__normal_iterator >; = void; _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]’ at /usr/include/c++/13/bits/basic_string.h:753:16, inlined from ‘String_type substitute_esc_chars(typename String_type::const_iterator, typename String_type::const_iterator) [with String_type = std::__cxx11::basic_string]’ at runme.cxx:8:62: /usr/include/c++/13/bits/char_traits.h:445:56: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ accessing 9223372036854775808 or more bytes at offsets 0 and 0 may overlap up to 9223372036854775809 bytes at offset -1 [-Wrestrict] 445 | return static_cast(__builtin_memcpy(__s1, __s2, __n)); | ^ $ g++-13 -v Using built-in specs. COLLECT_GCC=g++-13 COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.1.0-8ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2,rust --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.1.0 (Ubuntu 13.1.0-8ubuntu1~18.04)
[Bug c++/117063] New: Incorrect stringop-overread warning using std::vector::insert at -O3
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117063 Bug ID: 117063 Summary: Incorrect stringop-overread warning using std::vector::insert at -O3 Product: gcc Version: 14.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: wsf at fultondesigns dot co.uk Target Milestone: --- Standalone code is below and triggers warning gcc-14.1.0/include/c++/14.1.0/bits/stl_algobase.h:452:30: warning: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' reading between 9 and 9223372036854775800 bytes from a region of size 8 [-Wstringop-overread] Compile using: g++ -std=c++14 -O2 No warning with gcc 13.3.0, warning appears with gcc 14.1.0 and 14.2.0. Also warns, but requires -O3 instead of -O2, with godbolt.org build: g++ (Compiler-Explorer-Build-gcc-e9a213810aa9b87c7c868c93d5a93f3c63e03a3c-binutils-2.42) 15.0.0 20241010 (experimental) Workarounds: 1) Compile with -O1 instead of -O2 2) Alternative code using #if 1 instead of #if 0 below #include #include using std::vector; #include template inline typename C::const_iterator container_upper_bound(const C& container, const V& value) { return upper_bound(container.begin(), container.end(), value); } template T Next(T val) { ++val; return val; } template T Previous(T val) { --val; return val; } long m_firstDate = 500; long m_lastDate = 2400; vector event_dates { 300, 2000 }; int main() { vector relevantDates; if (event_dates.size() > 0) { if (m_firstDate < event_dates.front()) relevantDates.push_back(0L); vector::const_iterator start = ((m_firstDate < event_dates.front()) ? event_dates.begin() : Previous(container_upper_bound(event_dates, m_firstDate))); auto upper_iterator = container_upper_bound(event_dates, m_lastDate); vector::const_iterator stop = (upper_iterator != event_dates.end()) ? Next(upper_iterator) : event_dates.end(); #if 1 // Results in stringop-overread warning relevantDates.insert(relevantDates.end(), start, stop); #else // Workaround to remove warning std::copy(start, stop, std::back_inserter(relevantDates)); #endif } std::cout << "dates..." << std::endl; for (auto v : relevantDates) std::cout << v << std::endl; return 0; }