r314689 - Revert "[Sema] Warn on attribute nothrow conflicting with language specifiers"

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 2 10:36:06 PDT 2017


This is https://bugs.llvm.org/show_bug.cgi?id=34805

On Mon, Oct 2, 2017 at 10:16 AM, Reid Kleckner via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: rnk
> Date: Mon Oct  2 10:16:14 2017
> New Revision: 314689
>
> URL: http://llvm.org/viewvc/llvm-project?rev=314689&view=rev
> Log:
> Revert "[Sema] Warn on attribute nothrow conflicting with language specifiers"
>
> This reverts r314461.
>
> It is warning on user code that uses END_COM_MAP(), which expands to
> declare QueryInterface with conflicting exception specifers. I've spent
> a while trying to understand why, but haven't been able to extract a
> reduced test case. Let's revert and I'll keep trying.
>
> Removed:
>     cfe/trunk/test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>     cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=314689&r1=314688&r2=314689&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Oct  2 10:16:14 2017
> @@ -1419,10 +1419,6 @@ def err_noexcept_needs_constant_expressi
>    "argument to noexcept specifier must be a constant expression">;
>  def err_exception_spec_not_parsed : Error<
>    "exception specification is not available until end of class definition">;
> -def warn_nothrow_attr_disagrees_with_exception_specification
> -    : ExtWarn<"attribute 'nothrow' ignored due to conflicting exception "
> -              "specification">,
> -      InGroup<IgnoredAttributes>;
>
>  // C++ access checking
>  def err_class_redeclared_with_different_access : Error<
>
> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=314689&r1=314688&r2=314689&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Mon Oct  2 10:16:14 2017
> @@ -1985,25 +1985,6 @@ static void handleNoReturnAttr(Sema &S,
>        Attrs.getRange(), S.Context, Attrs.getAttributeSpellingListIndex()));
>  }
>
> -static void handleNoThrowAttr(Sema &S, Decl *D, const AttributeList &Attrs) {
> -  assert(isa<FunctionDecl>(D) && "attribute nothrow only valid on functions");
> -
> -  auto *FD = cast<FunctionDecl>(D);
> -  const auto *FPT = FD->getType()->getAs<FunctionProtoType>();
> -
> -  if (FPT && FPT->hasExceptionSpec() &&
> -      FPT->getExceptionSpecType() != EST_BasicNoexcept) {
> -    S.Diag(Attrs.getLoc(),
> -           diag::warn_nothrow_attr_disagrees_with_exception_specification);
> -    S.Diag(FD->getExceptionSpecSourceRange().getBegin(),
> -           diag::note_previous_decl)
> -        << "exception specification";
> -  }
> -
> -  D->addAttr(::new (S.Context) NoThrowAttr(
> -      Attrs.getRange(), S.Context, Attrs.getAttributeSpellingListIndex()));
> -}
> -
>  static void handleNoCallerSavedRegsAttr(Sema &S, Decl *D,
>                                          const AttributeList &Attr) {
>    if (S.CheckNoCallerSavedRegsAttr(Attr))
> @@ -6230,7 +6211,7 @@ static void ProcessDeclAttribute(Sema &S
>      handleNoReturnAttr(S, D, Attr);
>      break;
>    case AttributeList::AT_NoThrow:
> -    handleNoThrowAttr(S, D, Attr);
> +    handleSimpleAttribute<NoThrowAttr>(S, D, Attr);
>      break;
>    case AttributeList::AT_CUDAShared:
>      handleSharedAttr(S, D, Attr);
>
> Removed: cfe/trunk/test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp?rev=314688&view=auto
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp (original)
> +++ cfe/trunk/test/SemaCXX/warn-conflicting-nothrow-attr-exception-spec.cpp (removed)
> @@ -1,24 +0,0 @@
> -// RUN: %clang_cc1 %s -fcxx-exceptions -fsyntax-only -Wexceptions -verify -std=c++14
> -
> -struct S {
> -  //expected-warning at +2 {{attribute 'nothrow' ignored due to conflicting exception specification}}
> -  //expected-note at +1 {{exception specification declared here}}
> -  __attribute__((nothrow)) S() noexcept(true);
> -  //expected-warning at +2 {{attribute 'nothrow' ignored due to conflicting exception specification}}
> -  //expected-note at +1 {{exception specification declared here}}
> -  __attribute__((nothrow)) void Func1() noexcept(false);
> -  __attribute__((nothrow)) void Func3() noexcept;
> -};
> -
> -void throwing() noexcept(false);
> -void non_throwing(bool b = true) noexcept;
> -
> -template <typename Fn>
> -struct T {
> -    __attribute__((nothrow)) void f(Fn) noexcept(Fn());
> -};
> -
> -//expected-warning at -3 {{attribute 'nothrow' ignored due to conflicting exception specification}}
> -//expected-note at -4 {{exception specification declared here}}
> -template struct T<decltype(throwing)>;
> -template struct T<decltype(non_throwing)>;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list