summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAbramo Bagnara <abramo.bagnara@gmail.com>2011-03-18 15:21:59 +0000
committerAbramo Bagnara <abramo.bagnara@gmail.com>2011-03-18 15:21:59 +0000
commita3088e65688f2a1c95004c7a1b3cf2bb0fb79c00 (patch)
treebab92f5a2dac69c001efff9ee67384194ed87d91 /clang/lib
parent60804e160499307d59d24eb9265131260026df38 (diff)
downloadbcm5719-llvm-a3088e65688f2a1c95004c7a1b3cf2bb0fb79c00.tar.gz
bcm5719-llvm-a3088e65688f2a1c95004c7a1b3cf2bb0fb79c00.zip
Defined friend functions are *implicitly* inlined, unless the inline specifier occurs explicitly.
llvm-svn: 127877
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 832864014aa..f4381b235d5 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -3669,14 +3669,6 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
AbstractReturnType))
D.setInvalidType();
-
- if (isFriend) {
- // C++ [class.friend]p5
- // A function can be defined in a friend declaration of a
- // class . . . . Such a function is implicitly inline.
- isInline |= IsFunctionDefinition;
- }
-
if (Name.getNameKind() == DeclarationName::CXXConstructorName) {
// This is a C++ constructor declaration.
assert(DC->isRecord() &&
@@ -3774,6 +3766,14 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
NameInfo, R, TInfo, SC, SCAsWritten, isInline,
true/*HasPrototype*/);
}
+
+ if (isFriend && !isInline && IsFunctionDefinition) {
+ // C++ [class.friend]p5
+ // A function can be defined in a friend declaration of a
+ // class . . . . Such a function is implicitly inline.
+ NewFD->setImplicitlyInline();
+ }
+
SetNestedNameSpecifier(NewFD, D);
isExplicitSpecialization = false;
isFunctionTemplateSpecialization = false;
OpenPOWER on IntegriCloud