[PATCH] D38205: [Sema] Warn on attribute nothrow conflicting with language specifiers

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 25 05:32:47 PDT 2017

aaron.ballman added inline comments.

Comment at: include/clang/Basic/DiagnosticSemaKinds.td:1411
+def warn_nothrow_attr_disagrees_with_exception_specification
+    : ExtWarn<"Attribute nothrow ignored, it disagrees with language specified "
+              "exception specification">,
How about: `"attribute 'nothrow' ignored due to conflicting exception specification"`

Comment at: lib/Sema/SemaDeclAttr.cpp:1972
+static void handleNoThrowAttr(Sema &S, Decl *D, const AttributeList &attr) {
+  assert(isa<FunctionDecl>(D) && "attribute nothrow only valid on functions");
`attr` doesn't meet the coding guidelines. I'd go with `AL`.

Comment at: test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp:3
+struct S {
+  //expected-warning at +2 {{Attribute nothrow ignored, it disagrees with}}
You should add some tests that include templates and test it on Windows as well as non-Windows. I'm wondering about computed exception specifications during template instantiation. e.g.,
void throwing() noexcept(false);
void non_throwing() noexcept;

template <typename Fn>
struct T {
  __attribute__((nothrow)) void f(Fn) noexcept(Fn());

template struct T<decltype(throwing)>;
template struct T<decltype(non_throwing)>;


More information about the cfe-commits mailing list