diff mbox series

testsuite: c++: Allow for std::printf in g++.dg/modules/stdio-1_a.H [PR98529]

Message ID ydd5xvi2jgh.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show
Series testsuite: c++: Allow for std::printf in g++.dg/modules/stdio-1_a.H [PR98529] | expand

Commit Message

Rainer Orth May 13, 2024, 8:40 a.m. UTC
g++.dg/modules/stdio-1_a.H currently FAILs on Solaris:

FAIL: g++.dg/modules/stdio-1_a.H -std=c++17  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
FAIL: g++.dg/modules/stdio-1_a.H -std=c++2a  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
FAIL: g++.dg/modules/stdio-1_a.H -std=c++2b  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"

The problem is that the module file doesn't contain

 Depset:0 decl entity:95 function_decl:'::printf'

as expected by the test, but

 Depset:0 decl entity:26 function_decl:'::std::printf'

This happens because Solaris <stdio.h> declares printf in namespace std
as allowed by C++11, Annex D, D.5.

This patch allows for both forms.

Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and
x86_64-pc-linux-gnu.

Ok for trunk?

	Rainer

Comments

Nathaniel Shead May 13, 2024, 11:48 a.m. UTC | #1
On Mon, May 13, 2024 at 10:40:30AM +0200, Rainer Orth wrote:
> g++.dg/modules/stdio-1_a.H currently FAILs on Solaris:
> 
> FAIL: g++.dg/modules/stdio-1_a.H -std=c++17  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2a  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2b  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> 
> The problem is that the module file doesn't contain
> 
>  Depset:0 decl entity:95 function_decl:'::printf'
> 
> as expected by the test, but
> 
>  Depset:0 decl entity:26 function_decl:'::std::printf'
> 
> This happens because Solaris <stdio.h> declares printf in namespace std
> as allowed by C++11, Annex D, D.5.
> 
> This patch allows for both forms.
> 
> Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and
> x86_64-pc-linux-gnu.
> 
> Ok for trunk?
> 
> 	Rainer

There are a couple of other tests that appear to potentially have a
similar issue:

global-2_a.C
21:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^\n']*' added} module } }

global-3_a.C
15:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^'\n]*' added} module } }

Which I suppose maybe also should be updated in the same way; I guess
they don't fail on Solaris because they aren't actually correctly
testing what they think they are.

Otherwise LGTM.

Nathaniel

> 
> -- 
> -----------------------------------------------------------------------------
> Rainer Orth, Center for Biotechnology, Bielefeld University
> 
> 
> 2024-05-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
> 
> 	gcc/testsuite:
> 	PR c++/98529
> 	* g++.dg/modules/stdio-1_a.H (scan-lang-dump): Allow for
> 	::std::printf.
> 

> diff --git a/gcc/testsuite/g++.dg/modules/stdio-1_a.H b/gcc/testsuite/g++.dg/modules/stdio-1_a.H
> --- a/gcc/testsuite/g++.dg/modules/stdio-1_a.H
> +++ b/gcc/testsuite/g++.dg/modules/stdio-1_a.H
> @@ -10,5 +10,5 @@
>  #endif
>  // There should be *lots* of depsets (209 for glibc today)
>  // { dg-final { scan-lang-dump {Writing section:60 } module } }
> -// { dg-final { scan-lang-dump {Depset:0 decl entity:[0-9]* function_decl:'::printf'} module } }
> +// { dg-final { scan-lang-dump {Depset:0 decl entity:[0-9]* function_decl:'(::std)?::printf'} module } }
>  // { dg-final { scan-lang-dump {Depset:1 binding namespace_decl:'::printf'} module } }
Rainer Orth May 13, 2024, 11:59 a.m. UTC | #2
Hi Nathaniel,

> On Mon, May 13, 2024 at 10:40:30AM +0200, Rainer Orth wrote:
>> g++.dg/modules/stdio-1_a.H currently FAILs on Solaris:
>> 
>> FAIL: g++.dg/modules/stdio-1_a.H -std=c++17  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
>> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2a  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
>> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2b  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
>> 
>> The problem is that the module file doesn't contain
>> 
>>  Depset:0 decl entity:95 function_decl:'::printf'
>> 
>> as expected by the test, but
>> 
>>  Depset:0 decl entity:26 function_decl:'::std::printf'
>> 
>> This happens because Solaris <stdio.h> declares printf in namespace std
>> as allowed by C++11, Annex D, D.5.
>> 
>> This patch allows for both forms.
>> 
>> Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and
>> x86_64-pc-linux-gnu.
>> 
>> Ok for trunk?
>> 
>> 	Rainer
>
> There are a couple of other tests that appear to potentially have a
> similar issue:
>
> global-2_a.C
> 21:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^\n']*'
> added} module } }
>
> global-3_a.C
> 15:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^'\n]*'
> added} module } }

neither module file contains "Reachable GMF" at all, with ::printf or
otherwise.

> Which I suppose maybe also should be updated in the same way; I guess
> they don't fail on Solaris because they aren't actually correctly
> testing what they think they are.

Perhaps, but it would be useful to first understand what those tests are
supposed to look like.  WRT global-3_a.C, printf doesn't occur at all,
so this may just be a case of copy-and-paste.

Maybe Nathan, who authored the tests, can shed some light.

> Otherwise LGTM.

Thanks.  I'll go ahead and commit the patch as is, asjusting the other
two once it's become clear what they should look like.

	Rainer
Nathaniel Shead May 13, 2024, 12:03 p.m. UTC | #3
On Mon, May 13, 2024 at 01:59:51PM +0200, Rainer Orth wrote:
> Hi Nathaniel,
> 
> > On Mon, May 13, 2024 at 10:40:30AM +0200, Rainer Orth wrote:
> >> g++.dg/modules/stdio-1_a.H currently FAILs on Solaris:
> >> 
> >> FAIL: g++.dg/modules/stdio-1_a.H -std=c++17  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> >> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2a  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> >> FAIL: g++.dg/modules/stdio-1_a.H -std=c++2b  scan-lang-dump module "Depset:0 decl entity:[0-9]* function_decl:'::printf'"
> >> 
> >> The problem is that the module file doesn't contain
> >> 
> >>  Depset:0 decl entity:95 function_decl:'::printf'
> >> 
> >> as expected by the test, but
> >> 
> >>  Depset:0 decl entity:26 function_decl:'::std::printf'
> >> 
> >> This happens because Solaris <stdio.h> declares printf in namespace std
> >> as allowed by C++11, Annex D, D.5.
> >> 
> >> This patch allows for both forms.
> >> 
> >> Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and
> >> x86_64-pc-linux-gnu.
> >> 
> >> Ok for trunk?
> >> 
> >> 	Rainer
> >
> > There are a couple of other tests that appear to potentially have a
> > similar issue:
> >
> > global-2_a.C
> > 21:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^\n']*'
> > added} module } }
> >
> > global-3_a.C
> > 15:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^'\n]*'
> > added} module } }
> 
> neither module file contains "Reachable GMF" at all, with ::printf or
> otherwise.
> 

Yes, I think the test is aiming to check that such a declaration is not
added at all, and so that's correct. But if for some reason on some
system it did add "::std::printf" that would be a bug that would not be
caught by this test.

> > Which I suppose maybe also should be updated in the same way; I guess
> > they don't fail on Solaris because they aren't actually correctly
> > testing what they think they are.
> 
> Perhaps, but it would be useful to first understand what those tests are
> supposed to look like.  WRT global-3_a.C, printf doesn't occur at all,
> so this may just be a case of copy-and-paste.
> 
> Maybe Nathan, who authored the tests, can shed some light.
> 
> > Otherwise LGTM.
> 
> Thanks.  I'll go ahead and commit the patch as is, asjusting the other
> two once it's become clear what they should look like.
> 

Ah, I should have been clearer: I'm not sure I can approve, but I've
CC'd Jason in.

> 	Rainer
> 
> -- 
> -----------------------------------------------------------------------------
> Rainer Orth, Center for Biotechnology, Bielefeld University
Rainer Orth May 13, 2024, 12:10 p.m. UTC | #4
Hi Nathaniel,

>> > There are a couple of other tests that appear to potentially have a
>> > similar issue:
>> >
>> > global-2_a.C
>> > 21:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^\n']*'
>> > added} module } }
>> >
>> > global-3_a.C
>> > 15:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^'\n]*'
>> > added} module } }
>> 
>> neither module file contains "Reachable GMF" at all, with ::printf or
>> otherwise.
>> 
>
> Yes, I think the test is aiming to check that such a declaration is not
> added at all, and so that's correct. But if for some reason on some
> system it did add "::std::printf" that would be a bug that would not be
> caught by this test.

understood.  However, the question about global-3_a.C remains which
contains no printf at all.

>> > Which I suppose maybe also should be updated in the same way; I guess
>> > they don't fail on Solaris because they aren't actually correctly
>> > testing what they think they are.
>> 
>> Perhaps, but it would be useful to first understand what those tests are
>> supposed to look like.  WRT global-3_a.C, printf doesn't occur at all,
>> so this may just be a case of copy-and-paste.
>> 
>> Maybe Nathan, who authored the tests, can shed some light.
>> 
>> > Otherwise LGTM.
>> 
>> Thanks.  I'll go ahead and commit the patch as is, asjusting the other
>> two once it's become clear what they should look like.
>> 
>
> Ah, I should have been clearer: I'm not sure I can approve, but I've
> CC'd Jason in.

Sorry, I already committed the patch.  I can revert, of course, if
that's inappropriate.  OTOH, it could be considered obvious ;-)

	Rainer
Jason Merrill May 14, 2024, 10:11 p.m. UTC | #5
On 5/13/24 08:10, Rainer Orth wrote:
> Hi Nathaniel,
> 
>>>> There are a couple of other tests that appear to potentially have a
>>>> similar issue:
>>>>
>>>> global-2_a.C
>>>> 21:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^\n']*'
>>>> added} module } }
>>>>
>>>> global-3_a.C
>>>> 15:// { dg-final { scan-lang-dump-not {Reachable GMF '::printf[^'\n]*'
>>>> added} module } }
>>>
>>> neither module file contains "Reachable GMF" at all, with ::printf or
>>> otherwise.
>>>
>>
>> Yes, I think the test is aiming to check that such a declaration is not
>> added at all, and so that's correct. But if for some reason on some
>> system it did add "::std::printf" that would be a bug that would not be
>> caught by this test.
> 
> understood.  However, the question about global-3_a.C remains which
> contains no printf at all.
> 
>>>> Which I suppose maybe also should be updated in the same way; I guess
>>>> they don't fail on Solaris because they aren't actually correctly
>>>> testing what they think they are.
>>>
>>> Perhaps, but it would be useful to first understand what those tests are
>>> supposed to look like.  WRT global-3_a.C, printf doesn't occur at all,
>>> so this may just be a case of copy-and-paste.
>>>
>>> Maybe Nathan, who authored the tests, can shed some light.
>>>
>>>> Otherwise LGTM.
>>>
>>> Thanks.  I'll go ahead and commit the patch as is, asjusting the other
>>> two once it's become clear what they should look like.
>>>
>>
>> Ah, I should have been clearer: I'm not sure I can approve, but I've
>> CC'd Jason in.
> 
> Sorry, I already committed the patch.  I can revert, of course, if
> that's inappropriate.  OTOH, it could be considered obvious ;-)

Indeed, it seems obvious to me, thanks.

Jason
diff mbox series

Patch

diff --git a/gcc/testsuite/g++.dg/modules/stdio-1_a.H b/gcc/testsuite/g++.dg/modules/stdio-1_a.H
--- a/gcc/testsuite/g++.dg/modules/stdio-1_a.H
+++ b/gcc/testsuite/g++.dg/modules/stdio-1_a.H
@@ -10,5 +10,5 @@ 
 #endif
 // There should be *lots* of depsets (209 for glibc today)
 // { dg-final { scan-lang-dump {Writing section:60 } module } }
-// { dg-final { scan-lang-dump {Depset:0 decl entity:[0-9]* function_decl:'::printf'} module } }
+// { dg-final { scan-lang-dump {Depset:0 decl entity:[0-9]* function_decl:'(::std)?::printf'} module } }
 // { dg-final { scan-lang-dump {Depset:1 binding namespace_decl:'::printf'} module } }