rjmccall added inline comments.
================ Comment at: lib/Sema/SemaDeclObjC.cpp:4131-4133 + if (!getLangOpts().ObjCRuntime.allowsClassStubs()) { + Diag(IntfDecl->getLocation(), diag::err_class_stub_not_supported); + } ---------------- aaron.ballman wrote: > This should be done in Attr.td. You'll need to add a new LangOpt subclass > (around line 298 or so are examples), and then add it to the `LangOpts` array > when defining the attribute. Then you can remove this code as well as the new > diagnostic. I don't think there's a way to run arbitrary code in a `LangOpt` right now, but it should be relatively straightforward to generalize `ClangAttrEmitter` to handle this. Just add an optional `Code` property to `LangOpt` that's expressed in terms of an assumed variable `LangOpts`, so that `Attr.td` could have a line like: ``` def ObjCClassStubsAllowed : LangOpt<"ObjCClassStubsAllowed", "LangOpts.ObjCRuntime.allowsClassStubs()">; ``` `ClangAttrEmitter` would take that expression, parenthesize it, and use it where it currently expands to `"LangOpts." + Name`. It should be possible to remove the `Negated` field in favor of this. I guess that's probably worth doing vs. just having some hard-coded logic. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D59628/new/ https://reviews.llvm.org/D59628 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits