diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-16 02:29:15 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-16 02:29:15 +0000 |
commit | 459ef03126f9f0420efb3355e3b2ed3c1fdfb38a (patch) | |
tree | 33a638b34e308007b1303204b495a66ef9dc967d | |
parent | 148d9223f02dba1ba6e40848d413daa3ffc09dfe (diff) |
Correctly propagate the storage class to function template instantiations.
This fixes pr15753. This is another case of the fuzzy definition of the
"as written" storage class of an instantiation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179581 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateDecl.cpp | 2 | ||||
-rw-r--r-- | test/CodeGenCXX/pr15753.cpp | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index 2dbfeecc86..80c452fb03 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -1162,7 +1162,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D, FunctionDecl *Function = FunctionDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(), D->getNameInfo(), T, TInfo, - D->getStorageClass(), + D->getCanonicalDecl()->getStorageClass(), D->isInlineSpecified(), D->hasWrittenPrototype(), D->isConstexpr()); diff --git a/test/CodeGenCXX/pr15753.cpp b/test/CodeGenCXX/pr15753.cpp new file mode 100644 index 0000000000..fd2000be6e --- /dev/null +++ b/test/CodeGenCXX/pr15753.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s + +template <typename T> static int Foo(T t); +template <typename T> +int Foo(T t) { + return t; +} +template<> int Foo<int>(int i) { + return i; +} + +// CHECK-NOT: define |