diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-09-22 04:33:20 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-09-22 04:33:20 +0000 |
commit | 2a1900ae5fffd7f1fddded6ce29869f01e8d174b (patch) | |
tree | b0d78ad2654e2dfc98e8a296e31099f4ec3964f9 /test/CXX | |
parent | 7c0a11256444f1d5f101f39396327d10045daebc (diff) |
Closure types have no name (and can't have a typedef name for linkage
purposes), so they never formally have linkage.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@313957 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX')
-rw-r--r-- | test/CXX/basic/basic.link/p8.cpp | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/test/CXX/basic/basic.link/p8.cpp b/test/CXX/basic/basic.link/p8.cpp index 842a2414b6..07adc65b67 100644 --- a/test/CXX/basic/basic.link/p8.cpp +++ b/test/CXX/basic/basic.link/p8.cpp @@ -14,7 +14,7 @@ typedef decltype(f()) NoLinkage3; inline auto g() { return [] {}; } typedef decltype(g()) VisibleNoLinkage1; inline auto y = [] {}; -typedef decltype(x) VisibleNoLinkage2; +typedef decltype(y) VisibleNoLinkage2; inline auto h() { struct {} x; return x; } typedef decltype(h()) VisibleNoLinkage3; @@ -42,19 +42,12 @@ void use_no_linkage() { no_linkage3(); // expected-note {{used here}} } -// FIXME: This should emit an extension warning. It does not because we -// incorrectly give the lambda external linkage. -extern VisibleNoLinkage1 visible_no_linkage1(); - -// FIXME: We should accept this as an extension. We don't because we -// incorrectly give the lambda no linkage instead of "VisibleNoLinkage". -extern VisibleNoLinkage2 visible_no_linkage2(); // expected-error {{used but not defined}} - -// This case is correctly accepted as an extension. +extern VisibleNoLinkage1 visible_no_linkage1(); // expected-warning {{ISO C++ requires a definition}} +extern VisibleNoLinkage2 visible_no_linkage2(); // expected-warning {{ISO C++ requires a definition}} extern VisibleNoLinkage3 visible_no_linkage3(); // expected-warning {{ISO C++ requires a definition}} void use_visible_no_linkage() { - visible_no_linkage1(); + visible_no_linkage1(); // expected-note {{used here}} visible_no_linkage2(); // expected-note {{used here}} visible_no_linkage3(); // expected-note {{used here}} } |