Re: Towards __deprecated in cdefs.h
- In reply to: Warner Losh : "Re: Towards __deprecated in cdefs.h"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 26 Jul 2024 00:18:43 UTC
On Thu, Jul 25, 2024 at 5:57 PM Warner Losh <imp@bsdimp.com> wrote: > > > On Thu, Jul 25, 2024 at 3:12 PM Brooks Davis <brooks@freebsd.org> wrote: > >> On Thu, Jul 25, 2024 at 01:41:06PM -0600, Warner Losh wrote: >> > There's often times we want to mark interfaces as allowed, but please >> stop >> > using it. >> > >> > C23 has a new, fancy [[deprecated]] and [[deprecated("msg")]] forms. It >> > would be nice to start using it. >> > >> > The question is how. >> > >> > Linux adopted, then effectively abandoned, __deprecated as a decorator. >> At >> > first, it would produce warnings, but water was changed to be just >> > ornamental because too many warnings were thrown during a kernel build. >> > >> > So position [1] is to do what Linux did. Make iit a #define that does >> > nothing. >> > >> > Position [2] is do what Linux did originally: make it a warning to use >> > deprecated interfaces (but likely a -Wno-error warning). >> > >> > However, it would be nice sometimes to have a message that goes along >> with >> > the use. Sadly, there's no way to have a macro in C or C++ that either >> > takes an argument or doesn't. You either get pure replacement, or you >> get >> > parameterized replacement, but never both. So, we'd need >> > __deprecated_str or __deprecated_msg that took an optional message to >> give. >> > This form would always warn, but could be paired with either [1] or [2] >> as >> > [3] and [4]. >> > >> > Since we're talking about a macro that's slightly different than Linux, >> > should it have a different name, in which case we'd have __dep and >> > __dep_msg(x) as [5] and [6]. >> > >> > There's likely more crazy, but that's likely too crazy to contemplate. >> > >> > Personally, I think that option [4] is best: have __deprecated and >> > __deprecated_msg(x), both of which always warn. >> > >> > We don't need a __deprecated_error, I don't think. We get the same >> effect >> > by removing it entirely, or removing its declaration from the .h file >> while >> > keeping ot global. >> > >> > So before I spend a ton of time on implementing the various options, I >> > thought I'd poll on arch@ to see if there's agreement that [4] is >> likely >> > best, and if not, which other option I should put my weight behind. I >> > realized I needed a wider discussion when I did [2] in >> > https://reviews.freebsd.org/D46137 and the ensuing conversation in IRC >> > didn't have 'no-brainer yes' written all over it. >> >> [4] with a message variant works for me. It's close to the standard thing >> and makes it easy to see what you should be doing. >> > > Yea. It also follows a few other things done as well... > > >> > The down side of doing [4] is we'll have to also change OpenZFS... but >> we >> > likely should do that anyway since OpenZFS opted to use a copy of the >> > linuxkpi compiler.h file rather than #include it and make minor mods :(. >> > Maybe I'll make a patch for that too, or maybe I'll fix up >> > https://github.com/openzfs/zfs/pull/16388 >> >> IMO this file should be pared down to only things OpenZFS uses in >> shared code (__deprecated is not). It looks typical of the ZoL -> >> FreeBSD port in that overly broad shims where copied and hacked until >> the thing compiled, but then no effort was made to slim them down. See >> ecbf02791f9 in OpenZFS for another example. >> > > Yea... The other way is to share better: > https://reviews.freebsd.org/D46144 > and https://reviews.freebsd.org/D46145 so we share the fixes... I haven't > thought > about going the other direction... I'll have to see what that looks like. > > I had the same problems with the original OpenZFS boot loader integration: > It barely compiled, but was super fragile and tiny changes would break > it again and again while I was testing (eg rebase forward a few weeks > while testing). So I rewrote it to make it way simpler... > vs https://reviews.freebsd.org/D46146 which just starts to scratch the surface. There's a lot of other stuff that can likely be trimmed. Warner