]> granicus.if.org Git - clang/commit
Use the most recent previous decl to check if inline is added after a definition
authorReid Kleckner <reid@kleckner.net>
Wed, 8 Apr 2015 00:04:47 +0000 (00:04 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 8 Apr 2015 00:04:47 +0000 (00:04 +0000)
commit52838831258d2adf33a0ae765f5025d481db15b6
tree7591720cab12debc235ca50764499418e5f790a7
parentb3aaa7dd2d3126ff4cfbff0ba0abf4f417e5cb4d
Use the most recent previous decl to check if inline is added after a definition

This affects this test case:
  void foo();
  template <typename T> class C {
    friend inline void foo();
  };
  inline void foo() {}
  C<int> c;

Here, we instantiate the foo friend decl and add it to foo's redecl
chain. However, our previous decl pointer happens to reference the first
declaration of foo, which is not marked inline. When we check to see if
foo was already defined, we implicitly search all previous decls. We
should do the same for the inline check, instead of just checking this
particular previous decl.

Reviewers: rsmith

Differential Revision: http://reviews.llvm.org/D8872

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234374 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/SemaDeclCXX.cpp
test/SemaTemplate/friend.cpp