Author: rsmith Date: Tue Oct 10 14:07:44 2017 New Revision: 315366 URL: http://llvm.org/viewvc/llvm-project?rev=315366&view=rev Log: Add test for regression caused by reverted patch r315251.
Modified: cfe/trunk/test/SemaCXX/linkage2.cpp Modified: cfe/trunk/test/SemaCXX/linkage2.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/linkage2.cpp?rev=315366&r1=315365&r2=315366&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/linkage2.cpp (original) +++ cfe/trunk/test/SemaCXX/linkage2.cpp Tue Oct 10 14:07:44 2017 @@ -218,3 +218,34 @@ namespace PR18964 { unsigned &*foo; //expected-error{{'foo' declared as a pointer to a reference of type}} extern struct {} *foo; // don't assert } + +namespace typedef_name_for_linkage { + template<typename T> struct Use {}; + + struct A { A(); A(const A&); ~A(); }; + + typedef struct { + A a; + } B; + + struct C { + typedef struct { + A a; + } D; + }; + + typedef struct { + void f() { static int n; struct Inner {};} + } E; + + // FIXME: Ideally this would be accepted in all modes. In C++98, we trigger a + // linkage calculation to drive the "internal linkage type as template + // argument" warning. + typedef struct { + void f() { struct Inner {}; Use<Inner> ui; } + } F; +#if __cplusplus < 201103L + // expected-error@-2 {{unsupported: typedef changes linkage of anonymous type, but linkage was already computed}} + // expected-note@-5 {{use a tag name here}} +#endif +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits