From 4b702045888898367bb630b8f767e21e68d3445b Mon Sep 17 00:00:00 2001 From: Rafael Auler Date: Thu, 31 Jan 2019 09:38:31 +0000 Subject: Support attribute used in member funcs of class templates Summary: As PR17480 describes, clang does not support the used attribute for member functions of class templates. This means that if the member function is not used, its definition is never instantiated. This patch changes clang to emit the definition if it has the used attribute. Test Plan: Added a testcase Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D56928 llvm-svn: 352740 --- ...tr-used-member-function-implicit-instantiation.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp (limited to 'clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp') diff --git a/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp b/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp new file mode 100644 index 00000000000..7d2062f989d --- /dev/null +++ b/clang/test/CodeGenCXX/attr-used-member-function-implicit-instantiation.cpp @@ -0,0 +1,19 @@ +// 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 -- cgit v1.2.3