Author: majnemer Date: Wed Jun 8 11:05:07 2016 New Revision: 272159 URL: http://llvm.org/viewvc/llvm-project?rev=272159&view=rev Log: [Sema] Don't permit catching variably modified types
Variably modified types shouldn't be permitted in catch clauses. This fixes PR28047. Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/test/SemaCXX/exceptions.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=272159&r1=272158&r2=272159&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Jun 8 11:05:07 2016 @@ -5904,6 +5904,8 @@ def err_catch_incomplete_ref : Error< "cannot catch reference to incomplete type %0">; def err_catch_incomplete : Error<"cannot catch incomplete type %0">; def err_catch_rvalue_ref : Error<"cannot catch exceptions by rvalue reference">; +def err_catch_variably_modified : Error< + "cannot catch variably modified type %0">; def err_qualified_catch_declarator : Error< "exception declarator cannot be qualified">; def err_early_catch_all : Error<"catch-all handler must come last">; Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=272159&r1=272158&r2=272159&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Wed Jun 8 11:05:07 2016 @@ -12207,6 +12207,11 @@ VarDecl *Sema::BuildExceptionDeclaration Invalid = true; } + if (ExDeclType->isVariablyModifiedType()) { + Diag(Loc, diag::err_catch_variably_modified) << ExDeclType; + Invalid = true; + } + QualType BaseType = ExDeclType; int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference unsigned DK = diag::err_catch_incomplete; Modified: cfe/trunk/test/SemaCXX/exceptions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/exceptions.cpp?rev=272159&r1=272158&r2=272159&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/exceptions.cpp (original) +++ cfe/trunk/test/SemaCXX/exceptions.cpp Wed Jun 8 11:05:07 2016 @@ -268,3 +268,17 @@ void g() { } } } + +namespace PR28047 { +void test1(int i) { + try { + } catch (int(*)[i]) { // expected-error{{cannot catch variably modified type}} + } +} +void test2() { + int i; + try { + } catch (int(*)[i]) { // expected-error{{cannot catch variably modified type}} + } +} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits