On Wed, 2025-09-10 at 08:06 +0100, Jonathan Wakely wrote: > On Wed, 10 Sept 2025, 04:49 Xi Ruoyao wrote: > > > > On Tue, 2025-09-09 at 23:45 +0200, Arsen Arsenović via Gcc-help wrote: > > > We claim to be able to build using an ISO C++14 compiler, though (and > > > presumably a C compiler of similar age), so perhaps we shouldn't use > > > alloca. > > > > The claim is not fully true anyway... for example we perform narrowing > > conversions from constant, but C++14 does not allow to do so. > > Could you give an example in the GCC source where that's the case? > > C++14 allows narrowing from constants if the value fits in the > destination type, and requires a diagnostic if the value doesn't fit. > GCC conforms, allowing the former case and giving an error for the > latter: > > const int i = 42; > char c{i}; // not narrowing > char x{i * i}; > > narrow.cc:3:10: error: narrowing conversion of ‘1764’ from ‘int’ to > ‘char’ [-Wnarrowing] > 3 | char x{i * i}; > | ~~^~~ > > So I don't think the problem you described can happen. > > C++14 does not allow it for a **non-constant**, and GCC warns in that case: > > int i = 42; // not const > char c{i}; > > arrow.cc:2:8: warning: narrowing conversion of ‘i’ from ‘int’ to > ‘char’ [-Wnarrowing] > 2 | char c{i}; > | ^ > > Maybe you're thinking of cases like this, where a non-constant is narrowed? > > That is not allowed by C++14 and we should insert the necessary casts > (and build state1 with -Werror=narrowing). Oh sorry, my memory is outdated. Those has been fixed since https://gcc.gnu.org/r15-3826. -- Xi Ruoyao <xry111@xxxxxxxxxxx>