Author: d0k Date: Fri Aug 12 04:19:34 2016 New Revision: 278487 URL: http://llvm.org/viewvc/llvm-project?rev=278487&view=rev Log: [C++1z] Fix crash when decomposing structs with anonymous members.
The diagnostic format was invalid. Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/test/CXX/dcl.decl/dcl.decomp/p4.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=278487&r1=278486&r2=278487&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Aug 12 04:19:34 2016 @@ -405,8 +405,8 @@ def err_decomp_decl_non_public_base : Er def err_decomp_decl_non_public_member : Error< "cannot decompose non-public member %0 of %1">; def err_decomp_decl_anon_union_member : Error< - "cannot decompose class type %1 because it has an anonymous " - "%select{struct|union} member">; + "cannot decompose class type %0 because it has an anonymous " + "%select{struct|union}1 member">; def err_decomp_decl_std_tuple_element_not_specialized : Error< "cannot decompose this type; 'std::tuple_element<%0>::type' " "does not name a type">; Modified: cfe/trunk/test/CXX/dcl.decl/dcl.decomp/p4.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.decl/dcl.decomp/p4.cpp?rev=278487&r1=278486&r2=278487&view=diff ============================================================================== --- cfe/trunk/test/CXX/dcl.decl/dcl.decomp/p4.cpp (original) +++ cfe/trunk/test/CXX/dcl.decl/dcl.decomp/p4.cpp Fri Aug 12 04:19:34 2016 @@ -32,6 +32,25 @@ namespace NonPublicMembers { } } +namespace AnonymousMember { + struct Struct { + struct { // expected-note {{declared here}} + int i; + }; + }; + + struct Union { + union { // expected-note {{declared here}} + int i; + }; + }; + + void test() { + auto [a1] = Struct(); // expected-error {{cannot decompose class type 'AnonymousMember::Struct' because it has an anonymous struct member}} + auto [a2] = Union(); // expected-error {{cannot decompose class type 'AnonymousMember::Union' because it has an anonymous union member}} + } +} + namespace MultipleClasses { struct B : A { int a; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits