summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp20
-rw-r--r--clang/test/CodeGenCXX/inlinehint.cpp33
2 files changed, 5 insertions, 48 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 677c3b8bb1d..6936539f1ca 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -1304,15 +1304,6 @@ static QualType adjustFunctionTypeForInstantiation(ASTContext &Context,
NewFunc->getParamTypes(), NewEPI);
}
-/// Return true if any redeclaration of FD was inline specified. Useful for
-/// propagating the 'inline' specifier onto function template instantiations.
-static bool isAnyRedeclInlineSpecified(const FunctionDecl *FD) {
- for (const auto *R : FD->redecls())
- if (R->isInlineSpecified())
- return true;
- return false;
-}
-
/// Normal class members are of more specific types and therefore
/// don't make it here. This function serves two purposes:
/// 1) instantiating function templates
@@ -1381,8 +1372,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
FunctionDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
D->getNameInfo(), T, TInfo,
D->getCanonicalDecl()->getStorageClass(),
- isAnyRedeclInlineSpecified(D),
- D->hasWrittenPrototype(),
+ D->isInlineSpecified(), D->hasWrittenPrototype(),
D->isConstexpr());
Function->setRangeEnd(D->getSourceRange().getEnd());
@@ -1679,7 +1669,7 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
Method = CXXConstructorDecl::Create(SemaRef.Context, Record,
StartLoc, NameInfo, T, TInfo,
Constructor->isExplicit(),
- isAnyRedeclInlineSpecified(Constructor),
+ Constructor->isInlineSpecified(),
false, Constructor->isConstexpr());
// Claim that the instantiation of a constructor or constructor template
@@ -1714,12 +1704,12 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
} else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
Method = CXXDestructorDecl::Create(SemaRef.Context, Record,
StartLoc, NameInfo, T, TInfo,
- isAnyRedeclInlineSpecified(Destructor),
+ Destructor->isInlineSpecified(),
false);
} else if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
Method = CXXConversionDecl::Create(SemaRef.Context, Record,
StartLoc, NameInfo, T, TInfo,
- isAnyRedeclInlineSpecified(Conversion),
+ Conversion->isInlineSpecified(),
Conversion->isExplicit(),
Conversion->isConstexpr(),
Conversion->getLocEnd());
@@ -1727,7 +1717,7 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
StorageClass SC = D->isStatic() ? SC_Static : SC_None;
Method = CXXMethodDecl::Create(SemaRef.Context, Record,
StartLoc, NameInfo, T, TInfo,
- SC, isAnyRedeclInlineSpecified(D),
+ SC, D->isInlineSpecified(),
D->isConstexpr(), D->getLocEnd());
}
diff --git a/clang/test/CodeGenCXX/inlinehint.cpp b/clang/test/CodeGenCXX/inlinehint.cpp
deleted file mode 100644
index 2b984c3a2e0..00000000000
--- a/clang/test/CodeGenCXX/inlinehint.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-linux %s -emit-llvm -o - | FileCheck %s
-
-inline void InlineFunc() {}
-// CHECK: define linkonce_odr void @_Z10InlineFuncv() #[[INLINEHINTATTR:[0-9]+]]
-
-struct MyClass {
- static void InlineStaticMethod();
- void InlineInstanceMethod();
-};
-inline void MyClass::InlineStaticMethod() {}
-// CHECK: define linkonce_odr void @_ZN7MyClass18InlineStaticMethodEv() #[[INLINEHINTATTR]]
-inline void MyClass::InlineInstanceMethod() {}
-// CHECK: define linkonce_odr void @_ZN7MyClass20InlineInstanceMethodEv(%struct.MyClass* %this) #[[INLINEHINTATTR]]
-
-template <typename T>
-struct MyTemplate {
- static void InlineStaticMethod();
- void InlineInstanceMethod();
-};
-template <typename T> inline void MyTemplate<T>::InlineStaticMethod() {}
-// CHECK: define linkonce_odr void @_ZN10MyTemplateIiE18InlineStaticMethodEv() #[[INLINEHINTATTR]]
-template <typename T> inline void MyTemplate<T>::InlineInstanceMethod() {}
-// CHECK: define linkonce_odr void @_ZN10MyTemplateIiE20InlineInstanceMethodEv(%struct.MyTemplate* %this) #[[INLINEHINTATTR]]
-
-void UseThem() {
- InlineFunc();
- MyClass::InlineStaticMethod();
- MyClass().InlineInstanceMethod();
- MyTemplate<int>::InlineStaticMethod();
- MyTemplate<int>().InlineInstanceMethod();
-}
-
-// CHECK: attributes #[[INLINEHINTATTR]] = { {{.*}}inlinehint{{.*}} }
OpenPOWER on IntegriCloud