diff options
author | Ilya Biryukov <ibiryukov@google.com> | 2019-04-24 08:50:24 +0000 |
---|---|---|
committer | Ilya Biryukov <ibiryukov@google.com> | 2019-04-24 08:50:24 +0000 |
commit | b8292c955c81961171b097d9229663f915e5c26c (patch) | |
tree | 364cec9dfb887b07798214b9bd4caf6593d04f99 /clang/test/CodeGenCXX/cxx1y-variable-template-linkage.cpp | |
parent | 40f8f7f95c1b200117981b231b9a1902b31ea9a8 (diff) | |
download | bcm5719-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.cpp | 54 |
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() |