This is an archive of the discontinued LLVM Phabricator instance.

[clang][TypePrinter] Teach isSubstitutedDefaultArgument about integral types
ClosedPublic

Authored by Michael137 on Dec 13 2022, 5:52 PM.

Details

Summary

This patch handles default integral non-type template parameters.

After this patch the clang TypePrinter will omit default integral
template arguments when the PrintingPolicy::SuppressDefaultTemplateArgs
option is specified and sets us up to be able to re-use
clang::isSubstitutedDefaultArgument from the DWARF CodeGen
component.

Diff Detail

Event Timeline

Michael137 created this revision.Dec 13 2022, 5:52 PM
Herald added a project: Restricted Project. · View Herald TranscriptDec 13 2022, 5:52 PM
dblaikie added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98

@aprantl any idea if this is good/OK? (I guess it probably is - but maybe these strings were never meant to ignore/suppress default arguments of any kind? or maybe this is an ABI sort of thing where it suppressing some but not others is now unchangeable?)

  • Fix another test
Michael137 published this revision for review.Dec 15 2022, 9:05 AM
Michael137 added a subscriber: rsmith.
Michael137 added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98

Good point. There was a thread on the cfe mailing list a while ago about the last time this broke: https://lists.llvm.org/pipermail/cfe-dev/2020-November/067194.html

This was @rsmith's stance:

I think some of the other recent TypePrinter changes might also risk
changing the @encode output. Generally it seems unwise for @encode to be
using the type pretty-printer if it wants to be ABI-stable; I don't think
it's reasonable to expect any guarantees as to the stability of
pretty-printed type names. I think USR generation suffers from similar
problems; it too uses the type pretty-printer to generate
supposedly-ABI-stable keys in at least some cases.
Herald added a project: Restricted Project. · View Herald TranscriptDec 15 2022, 9:05 AM
Herald added a subscriber: cfe-commits. · View Herald Transcript
Michael137 retitled this revision from [WIP][clang][TypePrinter] Teach isSubstitutedDefaultArgument about integral types to [clang][TypePrinter] Teach isSubstitutedDefaultArgument about integral types.Dec 15 2022, 9:09 AM
Michael137 added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98
aprantl added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98

To me it really looks like the intention of the feature is to not substitute default parameters. But if we stop doing this now it will likely result in a surprising code size increase, that may not be considered worth it compared to the risk of breaking ABI by changing a default template parameter.

As far as this patch is concerned, it's neutral to this decision (which may not have been a conscious one).
It's certainly not good that every type printer change is an ABI break.

aprantl added a reviewer: friss.
dblaikie accepted this revision.Dec 15 2022, 12:36 PM

Looks good to me

clang/test/CodeGenObjCXX/encode.mm
93–98

Awesome, thanks for tracking down that context @Michael137.

Not quite sure I'm following you @aprantl, but I think you're saying this change is OK/seems consistent with other changes?

This revision is now accepted and ready to land.Dec 15 2022, 12:36 PM
aprantl added inline comments.Dec 15 2022, 12:48 PM
clang/test/CodeGenObjCXX/encode.mm
93–98

The current code (for @encode and USRs) seems to assume that TypePrinter output is stable.

I (personally) think that assumption ought to be wrong, because otherwise we'd never be able to make improvements such as this patch.

Aside from my personal preferences, practically this patch causes a problem for shipping an Objective-C compiler, since this is an ABI-breaking change. That's why I'd like to hear from someone with more insight into how @encoding is used in Objective-C wether this is something we need to be concerned about. If it is a concern we may need to add a TypePrinter configuration optimized for stability that preserves the current output format in eternity.

aprantl accepted this revision.Dec 15 2022, 1:38 PM
aprantl added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98

To summarize an offline conversation about this: Because there are no system frameworks that vend Objective-C++ types we are not concerned by a potential ABI break caused by this patch.

LGTM!

dblaikie added inline comments.Dec 15 2022, 2:19 PM
clang/test/CodeGenObjCXX/encode.mm
93–98

Awesome - thanks for getting that info, @aprantl - any idea if we could write this down somewhere? (in comments in tests that verify @encoding if there aren't too many of them?) So it's easy/clear next time.

Michael137 edited the summary of this revision. (Show Details)Dec 15 2022, 2:25 PM
aprantl added inline comments.Dec 15 2022, 3:40 PM
clang/test/CodeGenObjCXX/encode.mm
93–98

@Michael137 You could add a comment to this very test here, stating that the fact that the @encoding for C++ is effectively dependent on the TypePrinter implementation is a known bug.

Michael137 marked an inline comment as done.Dec 16 2022, 3:20 AM
Michael137 added inline comments.
clang/test/CodeGenObjCXX/encode.mm
93–98

Done

Michael137 marked an inline comment as done.
  • Add comment re. ABI break
Michael137 edited the summary of this revision. (Show Details)Dec 16 2022, 3:33 AM
  • Fix commit message
This revision was landed with ongoing or failed builds.Dec 16 2022, 3:39 AM
This revision was automatically updated to reflect the committed changes.

Missed couple of test cases in libcxx
About to fix those

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.
Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.
Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Perhaps these LibC++ tests shouldn't be testing/using clang warnings? (could the warnings be turned off in the libc++ tests?)

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.
Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Perhaps these LibC++ tests shouldn't be testing/using clang warnings? (could the warnings be turned off in the libc++ tests?)

In the failing tests we want to make sure we marked a struct as [[deprecated]]. In other tests we validate error messages to make sure things are ill-formed as mandated. We test the diagnostic to make sure the compilation fails for the expected reason and not a different compilation error. Do you have a suggestion how we can do that without checking Clang diagnostics?

In general I consider it bad practice to commit code when the CI is red.

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.

Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Perhaps these LibC++ tests shouldn't be testing/using clang warnings? (could the warnings be turned off in the libc++ tests?)

In the failing tests we want to make sure we marked a struct as [[deprecated]].

At least looking at https://reviews.llvm.org/rG54d7c4dc870c5822df3d5ce538ad3936ac6405fe - that could be made more robust to clang changes by perhaps using // expected-warning {{deprecated}} - unlikely that the word deprecated will be removed from a deprecation warning, or that we'll emit a deprecation warning on some unrelated line from the usage. This would make the test more resilient to phrasing/spelling changes without, imho, significantly reducing the functionality of the test.

Though even more generally, I could see a test being written to use -Werror and various single uses of deprecated entities, checking that they're rejected - though that'd probably slow things down too much (singel process invocations for each deprecated entity) - so I'd say the above ({{deprecated}}) is probably a fairly good balance of making the tests less brittle while keeping them fast/functional.

(for locale.convenience for instance - I think that test could be simplified to name each type separately, rather than using them together - so they're on separate lines. Or maybe you can separate them onto different lines despite the nesting, splitting the outer templtae name over multiple lines)

In other tests we validate error messages to make sure things are ill-formed as mandated. We test the diagnostic to make sure the compilation fails for the expected reason and not a different compilation error. Do you have a suggestion how we can do that without checking Clang diagnostics?

In general I consider it bad practice to commit code when the CI is red.

My take on this is that, at least to my understanding, libc++ implemented this CI without discussiong/buy-in from other LLVM subprojects that libc++ depends on - that I'm not sure were/are willing to accept this extra constraint on their development. It's not suitable to bring up a CI in that way and then say "make sure you don't break this" - we didn't agree not to break it. Especially with tests like these that could/should be written differently to be less brittle. Perhaps I've misunderstood this & there is more explicit buy-in from Clang developers/owners about this relationship between the two subprojects?

Generally prior to this it was up to libc++ folks to cleanup after upstream project's breakage (like lldb still does, to some extent) - though buildbots, etc, do provide llvm/clang contributors some chance to proactively provide fixes.

Oh, and I meant to mention https://buildkite.com/llvm-project/libcxx-ci/builds/16118#01851abb-f13e-4977-91df-b4274402b65a doesn't seem, at least to my cursory reading, to show diagnostic checking failures, but crashes? Is there something broken in the UI that's meant to show the diagnostic mismatches you ended up fixing? (or is the link out of date at this point, and the original failures are no longer visible? or something else?)

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.

Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Perhaps these LibC++ tests shouldn't be testing/using clang warnings? (could the warnings be turned off in the libc++ tests?)

In the failing tests we want to make sure we marked a struct as [[deprecated]].

At least looking at https://reviews.llvm.org/rG54d7c4dc870c5822df3d5ce538ad3936ac6405fe - that could be made more robust to clang changes by perhaps using // expected-warning {{deprecated}} - unlikely that the word deprecated will be removed from a deprecation warning, or that we'll emit a deprecation warning on some unrelated line from the usage. This would make the test more resilient to phrasing/spelling changes without, imho, significantly reducing the functionality of the test.

Though even more generally, I could see a test being written to use -Werror and various single uses of deprecated entities, checking that they're rejected - though that'd probably slow things down too much (singel process invocations for each deprecated entity) - so I'd say the above ({{deprecated}}) is probably a fairly good balance of making the tests less brittle while keeping them fast/functional.

(for locale.convenience for instance - I think that test could be simplified to name each type separately, rather than using them together - so they're on separate lines. Or maybe you can separate them onto different lines despite the nesting, splitting the outer templtae name over multiple lines)

I don't see how that helps to validate whether we have the expected error or an error due to ill-formed code. For example just forgetting a semicolon.

In other tests we validate error messages to make sure things are ill-formed as mandated. We test the diagnostic to make sure the compilation fails for the expected reason and not a different compilation error. Do you have a suggestion how we can do that without checking Clang diagnostics?

In general I consider it bad practice to commit code when the CI is red.

My take on this is that, at least to my understanding, libc++ implemented this CI without discussiong/buy-in from other LLVM subprojects that libc++ depends on - that I'm not sure were/are willing to accept this extra constraint on their development. It's not suitable to bring up a CI in that way and then say "make sure you don't break this" - we didn't agree not to break it. Especially with tests like these that could/should be written differently to be less brittle. Perhaps I've misunderstood this & there is more explicit buy-in from Clang developers/owners about this relationship between the two subprojects?

Generally prior to this it was up to libc++ folks to cleanup after upstream project's breakage (like lldb still does, to some extent) - though buildbots, etc, do provide llvm/clang contributors some chance to proactively provide fixes.

This CI has been discussed with members of the Clang community. In the past I've spoken with @aaron.ballman. I know @erichkeane requested @ldionne to create this CI recently. (I wasn't present during this meeting.) I don't know whether or not the creation of this CI has been further communicated in the Clang community. Note that this CI is a benefit for Clang too. Some patches that break libc++, also break code in other external projects. This patch probably doesn't break external projects, but @erichkeane's D126907 was reverted several times due to breakage in external projects. I also discovered some issues with that patch in libc++, so there having libc++ as test codebase would have been helpful.

I'm not asking Clang developers to fix libc++. But I ask not to commit code which is known to break other subprojects without giving that subproject a headsup.

Oh, and I meant to mention https://buildkite.com/llvm-project/libcxx-ci/builds/16118#01851abb-f13e-4977-91df-b4274402b65a doesn't seem, at least to my cursory reading, to show diagnostic checking failures, but crashes? Is there something broken in the UI that's meant to show the diagnostic mismatches you ended up fixing? (or is the link out of date at this point, and the original failures are no longer visible? or something else?)

When I look at that output for C++2b I see

error: 'warning' diagnostics expected but not seen: 

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 19: 'codecvt_utf8<wchar_t, 1114111, 0>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 20: 'codecvt_utf16<wchar_t, 1114111, 0>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 21: 'codecvt_utf8_utf16<wchar_t, 1114111, 0>' is deprecated

error: 'warning' diagnostics seen but not expected: 

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 19: 'codecvt_utf8<wchar_t>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 20: 'codecvt_utf16<wchar_t>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 21: 'codecvt_utf8_utf16<wchar_t>' is deprecated

For the modular build I also see ICEs, which are compiler bugs.

Missed couple of test cases in libcxx
About to fix those

There were more breakage due to this patch, which I fixed in D140272.

Next time please don't commit patches when the pre-commit CI is red. This build https://buildkite.com/llvm-project/libcxx-ci/builds/16118 shows the patch will break libc++. These pre-commit CI jobs were added specifically to aid the Clang developers to validate whether their changes break libc++. Libc++ heavily relies on its pre-commit CI so breaking the CI has a huge impact.

Note that when libc++ breaks there might be other projects that use the latest Clang HEAD that will be affected too. (Not likely with diagnostics, but likely when the modular build fails.)

When you have issues resolving the libc++ issues you can always reach out to us for assistance.

Perhaps these LibC++ tests shouldn't be testing/using clang warnings? (could the warnings be turned off in the libc++ tests?)

In the failing tests we want to make sure we marked a struct as [[deprecated]].

At least looking at https://reviews.llvm.org/rG54d7c4dc870c5822df3d5ce538ad3936ac6405fe - that could be made more robust to clang changes by perhaps using // expected-warning {{deprecated}} - unlikely that the word deprecated will be removed from a deprecation warning, or that we'll emit a deprecation warning on some unrelated line from the usage. This would make the test more resilient to phrasing/spelling changes without, imho, significantly reducing the functionality of the test.

Though even more generally, I could see a test being written to use -Werror and various single uses of deprecated entities, checking that they're rejected - though that'd probably slow things down too much (singel process invocations for each deprecated entity) - so I'd say the above ({{deprecated}}) is probably a fairly good balance of making the tests less brittle while keeping them fast/functional.

(for locale.convenience for instance - I think that test could be simplified to name each type separately, rather than using them together - so they're on separate lines. Or maybe you can separate them onto different lines despite the nesting, splitting the outer templtae name over multiple lines)

I don't see how that helps to validate whether we have the expected error or an error due to ill-formed code. For example just forgetting a semicolon.

reducing the wording checked for wouldn't have that problem - but yeah, going to totally wording agnostic testing wouldbe trickier. It could still avoid the "missing semicolon" problem by compiling with/without -Wdeprecated - expecting success without it, and failure with it. But I suspect the process launching overhead wouldn't be ideal for that direction anyway. At least reducing the dependence on specific warning wording/spelling would be help make the testing less brittle.

In other tests we validate error messages to make sure things are ill-formed as mandated. We test the diagnostic to make sure the compilation fails for the expected reason and not a different compilation error. Do you have a suggestion how we can do that without checking Clang diagnostics?

In general I consider it bad practice to commit code when the CI is red.

My take on this is that, at least to my understanding, libc++ implemented this CI without discussiong/buy-in from other LLVM subprojects that libc++ depends on - that I'm not sure were/are willing to accept this extra constraint on their development. It's not suitable to bring up a CI in that way and then say "make sure you don't break this" - we didn't agree not to break it. Especially with tests like these that could/should be written differently to be less brittle. Perhaps I've misunderstood this & there is more explicit buy-in from Clang developers/owners about this relationship between the two subprojects?

Generally prior to this it was up to libc++ folks to cleanup after upstream project's breakage (like lldb still does, to some extent) - though buildbots, etc, do provide llvm/clang contributors some chance to proactively provide fixes.

This CI has been discussed with members of the Clang community. In the past I've spoken with @aaron.ballman. I know @erichkeane requested @ldionne to create this CI recently. (I wasn't present during this meeting.) I don't know whether or not the creation of this CI has been further communicated in the Clang community. Note that this CI is a benefit for Clang too. Some patches that break libc++, also break code in other external projects. This patch probably doesn't break external projects, but @erichkeane's D126907 was reverted several times due to breakage in external projects. I also discovered some issues with that patch in libc++, so there having libc++ as test codebase would have been helpful.

*nod* it still seems a bit unreliable, though (like doesn't report existing failures differently from new failures, maybe? Producing false positive failures), which produces some tensions.

I'm not asking Clang developers to fix libc++. But I ask not to commit code which is known to break other subprojects without giving that subproject a headsup.

Ah, perhaps there's some way to automate that then? So it doesn't involve humans - the precommit CI infrastructure could email libc++ developers about the failure directly, rather than requiring the human developer to be the message carrier?

Oh, and I meant to mention https://buildkite.com/llvm-project/libcxx-ci/builds/16118#01851abb-f13e-4977-91df-b4274402b65a doesn't seem, at least to my cursory reading, to show diagnostic checking failures, but crashes? Is there something broken in the UI that's meant to show the diagnostic mismatches you ended up fixing? (or is the link out of date at this point, and the original failures are no longer visible? or something else?)

When I look at that output for C++2b I see

error: 'warning' diagnostics expected but not seen: 

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 19: 'codecvt_utf8<wchar_t, 1114111, 0>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 20: 'codecvt_utf16<wchar_t, 1114111, 0>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 21: 'codecvt_utf8_utf16<wchar_t, 1114111, 0>' is deprecated

error: 'warning' diagnostics seen but not expected: 

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 19: 'codecvt_utf8<wchar_t>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 20: 'codecvt_utf16<wchar_t>' is deprecated

  File /home/libcxx-builder/.buildkite-agent/builds/61f52b66aa77-1/llvm-project/libcxx-ci/libcxx/test/std/localization/locale.stdcvt/depr.verify.cpp Line 21: 'codecvt_utf8_utf16<wchar_t>' is deprecated

For the modular build I also see ICEs, which are compiler bugs.

The modular build ICE is something pre-existing/not caused by this patch, right? Makes it hard to know when there are real failures if there are false positives like this.

And at least for me, when I go to that link and click on the "C++2b" bar I only see the modular crash, I don't see these deprecated diagnostic errors:

https://imgur.com/a/ZJdbumR

And looking at the raw log ah, there I do see the failures if I search for them. But amongst so much other noise that I don't think it's reasonable to expect anyone to find them, really? As they're all of about 50 lines in a many thousand line log file.

I think it would be better to have a meeting to discuss this further instead of posting in this review. I propose to do it after everybody's back from their holidays. WDYT?

@dblaikie

We added the libc++ tests to the Clang pre-commit CI after discussing with @erichkeane since he told me breaking libc++ was a recurring pain point, and having a way to detect that would be greatly appreciated by the Clang folks. The goal was really only to help Clang developers catch more issues earlier. I believe this confusion is only the result of miscommunication within the Clang community -- it seems that not all Clang developers know equally well what tools are available to them and what each bit of infrastructure should be used for. @erichkeane @aaron.ballman Would it make sense for you folks to post something on Discourse to explain what the expectations are w.r.t. Clang pre-commit CI?

@dblaikie

We added the libc++ tests to the Clang pre-commit CI after discussing with @erichkeane since he told me breaking libc++ was a recurring pain point, and having a way to detect that would be greatly appreciated by the Clang folks. The goal was really only to help Clang developers catch more issues earlier. I believe this confusion is only the result of miscommunication within the Clang community -- it seems that not all Clang developers know equally well what tools are available to them and what each bit of infrastructure should be used for. @erichkeane @aaron.ballman Would it make sense for you folks to post something on Discourse to explain what the expectations are w.r.t. Clang pre-commit CI?

That is DEFINITELY true, the Clang pre-commit CI is historically really unreliable, so seeing a failed CI is something that even the most experienced of us are ignoring quite a bit thanks to its unreliability. An announcement of some sort that we CAN trust the libc++ one is perhaps a good idea. Perhaps I'll work with Aaron to come up with a message.

@dblaikie

We added the libc++ tests to the Clang pre-commit CI after discussing with @erichkeane since he told me breaking libc++ was a recurring pain point, and having a way to detect that would be greatly appreciated by the Clang folks. The goal was really only to help Clang developers catch more issues earlier. I believe this confusion is only the result of miscommunication within the Clang community -- it seems that not all Clang developers know equally well what tools are available to them and what each bit of infrastructure should be used for. @erichkeane @aaron.ballman Would it make sense for you folks to post something on Discourse to explain what the expectations are w.r.t. Clang pre-commit CI?

That is DEFINITELY true, the Clang pre-commit CI is historically really unreliable, so seeing a failed CI is something that even the most experienced of us are ignoring quite a bit thanks to its unreliability. An announcement of some sort that we CAN trust the libc++ one is perhaps a good idea. Perhaps I'll work with Aaron to come up with a message.

FWIW, my experience with the libc++ one hasn't been great either. Both in terms of test quality, like the diagnostic issue in this case (changing the phrasing of a diagnostic doesn't seem like it should cause libc++ test failures - I think these tests should be rephrased to be less brittle) and in terms of ease of use (I still don't know how I/others should've been able to reliably/easily get to the failure from the links in this review - all I could see were modular crash dumps).