On Nov 26, 2024, at 11:55 AM, David Malcolm <dmalc...@redhat.com> wrote:
> 
> Ping

Ok. I'll punt on the diff documentation bits.

> On Mon, 2024-11-18 at 16:22 -0500, David Malcolm wrote:
>> Another ping for this patch; any pex experts out there?
>> 
>> Thanks!
>> Dave
>> 
>> On Wed, 2024-05-29 at 17:06 -0400, David Malcolm wrote:
>>> On Wed, 2024-05-29 at 16:35 -0400, Eric Gallager wrote:
>>>> On Tue, May 28, 2024 at 1:21 PM David Malcolm
>>>> <dmalc...@redhat.com>
>>>> wrote:
>>>>> 
>>>>> Ping.
>>>>> 
>>>>> This patch has actually been *very* helpful to me when
>>>>> debugging
>>>>> selftest failures involving ASSERT_STREQ.
>>>>> 
>>>>> Thanks
>>>>> Dave
>>>>> 
>>>> 
>>>> Currently `diff` is only listed under the "Tools/packages
>>>> necessary
>>>> for modifying GCC" section of install/prerequisites.html:
>>>> https://gcc.gnu.org/install/prerequisites.html
>>>> If it's going to become a dependency for actually running GCC,
>>>> too,
>>>> it
>>>> should get moved to be documented elsewhere, IMO.
>>> 
>>> All this is selftest code, and is turned off in a release
>>> configuration
>>> of GCC.  The code path that invokes "diff" is when a selftest is
>>> failing, which is immediately before a hard failure of the *build*
>>> of
>>> GCC.  So arguably this is just a build-time thing for people
>>> packaging/hacking on GCC, and thus not a new dependency for end-
>>> usage.
>>> 
>>> BTW I'm a bit hazy on the details of how "pex" is meant to work, so
>>> hopefully someone more knowledgable than me can comment on that
>>> aspect
>>> of the patch.  It seems to work though.
>>> 
>>> Dave
>>> 
>>>> 
>>>>> On Fri, 2024-05-17 at 15:51 -0400, David Malcolm wrote:
>>>>>> Currently when ASSERT_STREQ or ASSERT_STREQ_AT fail we print
>>>>>> both strings to stderr.  However it can be hard to figure out
>>>>>> the problem (e.g. for 1-character differences in long
>>>>>> strings).
>>>>>> 
>>>>>> Extend the output by writing out the strings to tempfiles and
>>>>>> invoking "diff -up" on them when we have such a selftest
>>>>>> failure,
>>>>>> to (I hope) simplify debugging.
>>>>>> 
>>>>>> Successfully bootstrapped & regrtested on x86_64-pc-linux-
>>>>>> gnu.
>>>>>> 
>>>>>> OK for trunk?
>>>>>> 
>>>>>> gcc/ChangeLog:
>>>>>>         * selftest.cc (selftest::print_diff): New function.
>>>>>>         (selftest::assert_streq): Call it when we have non-
>>>>>> equal
>>>>>>         non-null strings.
>>>>>> 
>>>>>> Signed-off-by: David Malcolm <dmalc...@redhat.com>
>>>>>> ---
>>>>>>  gcc/selftest.cc | 28 ++++++++++++++++++++++++++--
>>>>>>  1 file changed, 26 insertions(+), 2 deletions(-)
>>>>>> 
>>>>>> diff --git a/gcc/selftest.cc b/gcc/selftest.cc
>>>>>> index 6438d86a6aa0..f58c0631908e 100644
>>>>>> --- a/gcc/selftest.cc
>>>>>> +++ b/gcc/selftest.cc
>>>>>> @@ -63,6 +63,26 @@ fail_formatted (const location &loc, const
>>>>>> char
>>>>>> *fmt, ...)
>>>>>>    abort ();
>>>>>>  }
>>>>>> 
>>>>>> +/* Invoke "diff" to print the difference between VAL1 and
>>>>>> VAL2
>>>>>> +   on stdout.  */
>>>>>> +
>>>>>> +static void
>>>>>> +print_diff (const location &loc, const char *val1, const
>>>>>> char
>>>>>> *val2)
>>>>>> +{
>>>>>> +  temp_source_file tmpfile1 (loc, ".txt", val1);
>>>>>> +  temp_source_file tmpfile2 (loc, ".txt", val2);
>>>>>> +  const char *args[] = {"diff",
>>>>>> +                       "-up",
>>>>>> +                       tmpfile1.get_filename (),
>>>>>> +                       tmpfile2.get_filename (),
>>>>>> +                       NULL};
>>>>>> +  int exit_status = 0;
>>>>>> +  int err = 0;
>>>>>> +  pex_one (PEX_SEARCH | PEX_LAST,
>>>>>> +          args[0], CONST_CAST (char **, args),
>>>>>> +          NULL, NULL, NULL, &exit_status, &err);
>>>>>> +}
>>>>>> +
>>>>>>  /* Implementation detail of ASSERT_STREQ.
>>>>>>     Compare val1 and val2 with strcmp.  They ought
>>>>>>     to be non-NULL; fail gracefully if either or both are
>>>>>> NULL. 
>>>>>> */
>>>>>> @@ -89,8 +109,12 @@ assert_streq (const location &loc,
>>>>>>         if (strcmp (val1, val2) == 0)
>>>>>>           pass (loc, "ASSERT_STREQ");
>>>>>>         else
>>>>>> -         fail_formatted (loc, "ASSERT_STREQ (%s, %s)\n
>>>>>> val1=\"%s\"\n
>>>>>> val2=\"%s\"\n",
>>>>>> -                         desc_val1, desc_val2, val1, val2);
>>>>>> +         {
>>>>>> +           print_diff (loc, val1, val2);
>>>>>> +           fail_formatted
>>>>>> +             (loc, "ASSERT_STREQ (%s, %s)\n val1=\"%s\"\n
>>>>>> val2=\"%s\"\n",
>>>>>> +              desc_val1, desc_val2, val1, val2);
>>>>>> +         }
>>>>>>        }
>>>>>>  }

Reply via email to