r362225 - Fix for PR42089, regression from r362119
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Fri May 31 07:26:19 PDT 2019
Author: erichkeane
Date: Fri May 31 07:26:19 2019
New Revision: 362225
URL: http://llvm.org/viewvc/llvm-project?rev=362225&view=rev
Log:
Fix for PR42089, regression from r362119
The implementation of the NoThrow ExceptionSpecificationType missed a
switch statement for forming the diagnostic when an out-of-line member
redeclaration misses the exception specification. This patch adds the
correct case statement.
Modified:
cfe/trunk/lib/Sema/SemaExceptionSpec.cpp
cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp
Modified: cfe/trunk/lib/Sema/SemaExceptionSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExceptionSpec.cpp?rev=362225&r1=362224&r2=362225&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExceptionSpec.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExceptionSpec.cpp Fri May 31 07:26:19 2019
@@ -381,6 +381,11 @@ bool Sema::CheckEquivalentExceptionSpec(
// when declaring a replaceable global allocation function.
DiagID = diag::ext_missing_exception_specification;
ReturnValueOnError = false;
+ } else if (ESI.Type == EST_NoThrow) {
+ // Allow missing attribute 'nothrow' in redeclarations, since this is a very
+ // common omission.
+ DiagID = diag::ext_missing_exception_specification;
+ ReturnValueOnError = false;
} else {
DiagID = diag::err_missing_exception_specification;
ReturnValueOnError = true;
@@ -421,7 +426,9 @@ bool Sema::CheckEquivalentExceptionSpec(
OldProto->getNoexceptExpr()->printPretty(OS, nullptr, getPrintingPolicy());
OS << ")";
break;
-
+ case EST_NoThrow:
+ OS <<"__attribute__((nothrow))";
+ break;
default:
llvm_unreachable("This spec type is compatible with none.");
}
Modified: cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp?rev=362225&r1=362224&r2=362225&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp (original)
+++ cfe/trunk/test/SemaCXX/MicrosoftExtensions.cpp Fri May 31 07:26:19 2019
@@ -517,6 +517,15 @@ void PR34109(int* a) {
delete a;
}
+namespace PR42089 {
+ struct S {
+ __attribute__((nothrow)) void Foo(); // expected-note {{previous declaration is here}}
+ __attribute__((nothrow)) void Bar();
+ };
+ void S::Foo(){} // expected-warning {{is missing exception specification}}
+ __attribute__((nothrow)) void S::Bar(){}
+}
+
#elif TEST2
// Check that __unaligned is not recognized if MS extensions are not enabled
More information about the cfe-commits
mailing list