From: Rafael Espindola Date: Tue, 16 Apr 2013 02:29:15 +0000 (+0000) Subject: Correctly propagate the storage class to function template instantiations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=459ef03126f9f0420efb3355e3b2ed3c1fdfb38a;p=clang 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 --- 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 static int Foo(T t); +template +int Foo(T t) { + return t; +} +template<> int Foo(int i) { + return i; +} + +// CHECK-NOT: define