summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2019-04-24 08:50:24 +0000
committerIlya Biryukov <ibiryukov@google.com>2019-04-24 08:50:24 +0000
commitb8292c955c81961171b097d9229663f915e5c26c (patch)
tree364cec9dfb887b07798214b9bd4caf6593d04f99 /clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
parent40f8f7f95c1b200117981b231b9a1902b31ea9a8 (diff)
downloadbcm5719-llvm-b8292c955c81961171b097d9229663f915e5c26c.tar.gz
bcm5719-llvm-b8292c955c81961171b097d9229663f915e5c26c.zip
Revert r359048: C++ DR2387: a variable template declared wthi
The change breaks libc++ with the follwing error: In file included from valarray:4: .../include/c++/v1/valarray:1062:60: error: explicit instantiation declaration of 'valarray<_Tp>' with internal linkage _LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t)) ^ .../include/c++/v1/valarray:1063:60: error: explicit instantiation declaration of '~valarray<_Tp>' with internal linkage _LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::~valarray()) llvm-svn: 359076
Diffstat (limited to 'clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp')
-rw-r--r--clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp54
1 files changed, 7 insertions, 47 deletions
diff --git a/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp b/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
index c77841cabc4..bc775568aaf 100644
--- a/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
+++ b/clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp
@@ -6,61 +6,21 @@
// should be 'internal global' and not 'linkonce_odr global'.
template <typename T> int x = 42;
-// CHECK-DAG: @_Z1xIiE = linkonce_odr global
-// CHECK-DAG: @_Z1xIZL3foovE3FooE = internal global
-
-// 'static' affects the linkage of the global
-template <typename T> static int y = 42;
-// CHECK-DAG: @_ZL1yIiE = internal global
-// CHECK-DAG: @_ZL1yIZL3foovE3FooE = internal global
-
-// 'const' does not
-template <typename T> const int z = 42;
-// CHECK-DAG: @_Z1zIiE = linkonce_odr constant
-// CHECK-DAG: @_Z1zIZL3foovE3FooE = internal constant
-template <typename T> T t = 42;
-// CHECK-DAG: @_Z1tIiE = linkonce_odr global
-// CHECK-DAG: @_Z1tIKiE = linkonce_odr constant
-
-int mode;
+// CHECK-DAG: @_Z1xIZL3foovE3FooE = internal global
// CHECK-DAG: define internal dereferenceable(4) i32* @_ZL3foov(
-static const int &foo() {
+static int &foo() {
struct Foo { };
-
- switch (mode) {
- case 0:
- // CHECK-DAG: @_Z1xIiE
- return x<int>;
- case 1:
- // CHECK-DAG: @_Z1xIZL3foovE3FooE
- return x<Foo>;
- case 2:
- // CHECK-DAG: @_ZL1yIiE
- return y<int>;
- case 3:
- // CHECK-DAG: @_ZL1yIZL3foovE3FooE
- return y<Foo>;
- case 4:
- // CHECK-DAG: @_Z1zIiE
- return z<int>;
- case 5:
- // CHECK-DAG: @_Z1zIZL3foovE3FooE
- return z<Foo>;
- case 6:
- // CHECK-DAG: @_Z1tIiE
- return t<int>;
- case 7:
- // CHECK-DAG: @_Z1tIKiE
- return t<const int>;
- }
+
+ // CHECK-DAG: ret i32* @_Z1xIZL3foovE3FooE
+ return x<Foo>;
}
#if !__has_feature(cxx_exceptions) // File A
// CHECKA-DAG: define dereferenceable(4) i32* @_Z3barv(
-const int &bar() {
+int &bar() {
// CHECKA-DAG: call dereferenceable(4) i32* @_ZL3foov()
return foo();
}
@@ -68,7 +28,7 @@ const int &bar() {
#else // File B
// CHECKB-DAG: declare dereferenceable(4) i32* @_Z3barv(
-const int &bar();
+int &bar();
int main() {
// CHECKB-DAG: call dereferenceable(4) i32* @_Z3barv()
OpenPOWER on IntegriCloud