[cfe-dev] Objective-C++11: concerns about adding static_assert support to @interface / @implementation?

Nico Weber via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 8 08:11:18 PST 2019


Hi,

I'm trying to enable -Wextra-semi in Chromium. I'm almost there; the last
remaining issue is that we have a macro THREAD_CHECKER(name) that expands
to nothing in release builds but to `ThreadChecker name` in debug builds.
It's supposed to be used like

class C {
  THREAD_CHECKER(checker_);
};

And then in the implementation, you
do CHECK_CALLED_ON_VALID_THREAD(checker_); which again does nothing in
release builds but calls a method on checker_ in debug builds.

Since this is a declaration, this triggers -Wextra-semi. I figured the way
to spell the usual `do {} while (0)` you tag on the end of a statement
macro to silence this warning could be `static_assert(1, "")`, so I changed
THREAD_CHECKER() to expand to that in release builds instead of nothing.

This works beautifully, but Objective-C interfaces don't support
static_assert()s as I have learned. So I'd like to add support for that.

Before I start writing a patch for that: Are people fine with supporting
static_assert in the member list of an @interface or @implementation in
Obj-C? It not being supported seems like an oversight to me, but maybe I'm
missing something – so I figured I'd ask before I start writing a patch :)

Nico
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190308/b0acbcbe/attachment.html>


More information about the cfe-dev mailing list