summaryrefslogtreecommitdiff
path: root/test/CXX
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-09-22 04:33:20 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-09-22 04:33:20 +0000
commit2a1900ae5fffd7f1fddded6ce29869f01e8d174b (patch)
treeb0d78ad2654e2dfc98e8a296e31099f4ec3964f9 /test/CXX
parent7c0a11256444f1d5f101f39396327d10045daebc (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.cpp15
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}}
}