On Sun, 29 Jul 2018, Martin Sebor wrote: > On 07/29/2018 04:56 AM, Bernd Edlinger wrote: > > Hi! > > > > This fixes two wrong code bugs where string_constant > > returns over length string constants. Initializers > > like that are rejected in C++, but valid in C. > > If by valid you are referring to declarations like the one in > the added test: > > const char a[2][3] = { "1234", "xyz" }; > > then (as I explained), the excess elements in "1234" make > the char[3] initialization and thus the test case undefined. > I have resolved bug 86711 as invalid on those grounds. > > Bug 86711 has a valid test case that needs to be fixed, along > with bug 86688 that I raised for the same underlying problem: > considering the excess nul as part of the string. As has been > discussed in a separate bug, rather than working around > the excessively long strings in the middle-end, it would be > preferable to avoid creating them to begin with. > > I'm already working on a fix for bug 86688, in part because > I introduced the code change and also because I'm making other > changes in this area -- bug 86552. Both of these in response > to your comments. > > I would normally welcome someone else helping with my work > but (as I already made clear last week) it's counteproductive > to have two people working in the very same area at the same > time, especially when they are working at cross purposes as > you seem to be hell-bent on doing. > > > I have xfailed strlenopt-49.c, which tests this feature. > > That's not appropriate. The purpose of the test is to verify > the fix for bug 86428: namely, that a call to strlen() on > an array initialized with a string of the same length is > folded, such as in: > > const char b[4] = "123\0"; > > That's a valid initializer that can and should continue to be > folded. The test needs to continue to exercise that feature. > > The test also happens to exercise invalid/overlong initializers. > This is because that, in my view, it's safer to fold the result > of such calls to a constant than than to call the library > function and have it either return an unpredictable value or > perhaps even crash. > > > Personally I don't think that it is worth the effort to > > optimize something that is per se invalid in C++. > > This is a C test, not C++. (I don't suppose you are actually > saying that only the common subset between C and C++ is worth > optimizing.) > > Just in case it isn't clear from the above: the point of > the test exercising the behavior for overlong strings isn't > optimizing undefined behavior but rather avoiding the worst > consequences of it. I have already explained this once > before so I'm starting to wonder if I'm being insufficiently > clear or if you are not receiving or reading (or understanding) > my responses. We can have a broader discussion about whether > this is the best approach for GCC to take either in this instance > or in general, but in the meantime I would appreciate it if you > refrained from undoing my changes just because you don't agree > with or don't understand the motivation behind them. > > Martin > > PS I continue to wonder about your motivation and ethics. It's > rare to have someone so openly, blatantly and persistently try > to undermine someone else's work.
Martin, you are clearly the one being hostile here - Bernd is trying to help. In fact his patches are more focused, easier to undestand and thus easier to review. Get your feelings about "ownership" under control. Richard.