From: Rafael Auler Date: Fri, 8 Mar 2019 20:23:57 +0000 (+0000) Subject: Revert "Recommit "Support attribute used in member funcs of class templates"" X-Git-Tag: llvmorg-10-init~10401 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94b575b23bded5067ad6ba254be3f53b98ed7c6a;p=platform%2Fupstream%2Fllvm.git Revert "Recommit "Support attribute used in member funcs of class templates"" There is nontrivial bug caused in lld that I need to further investigate. Meanwhile, I'll revert this. This reverts commit 8297e93480c636dc90fd14653c5a66406193363f. llvm-svn: 355721 --- diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index d4baa45..73909fe 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -2232,20 +2232,6 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D, Owner->addDecl(Method); } - // PR17480: Honor the used attribute to instantiate member function - // definitions - if (Method->hasAttr()) { - if (const auto *A = dyn_cast(Owner)) { - SourceLocation Loc; - if (const MemberSpecializationInfo *MSInfo = - A->getMemberSpecializationInfo()) - Loc = MSInfo->getPointOfInstantiation(); - else if (const auto *Spec = dyn_cast(A)) - Loc = Spec->getPointOfInstantiation(); - SemaRef.MarkFunctionReferenced(Loc, Method); - } - } - return Method; } diff --git a/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp b/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp deleted file mode 100644 index 7d2062f..0000000 --- a/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s - -// Check that PR17480 is fixed: __attribute__((used)) ignored in templated -// classes -namespace InstantiateUsedMemberDefinition { -template -struct S { - int __attribute__((used)) f() { - return 0; - } -}; - -void test() { - // Check that InstantiateUsedMemberDefinition::S::f() is defined - // as a result of the S class template implicit instantiation - // CHECK: define linkonce_odr i32 @_ZN31InstantiateUsedMemberDefinition1SIiE1fEv - S inst; -} -} // namespace InstantiateUsedMemberDefinition