]> granicus.if.org Git - clang/commitdiff
[Frontend] Treat function with skipped body as definition
authorIlya Biryukov <ibiryukov@google.com>
Thu, 14 Dec 2017 13:00:33 +0000 (13:00 +0000)
committerIlya Biryukov <ibiryukov@google.com>
Thu, 14 Dec 2017 13:00:33 +0000 (13:00 +0000)
Summary:
This fixes an invalid warning about missing definition of a function when
parsing with SkipFunctionBodies=true

Reviewers: bkramer, sepavloff

Reviewed By: sepavloff

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D41189

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@320696 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
test/Index/skipped_function_bodies.cpp [new file with mode: 0644]

index 3bf79bba8fda10766775ec5095b0e288e9a31c06..2f9d4dfde1671454b0aa5dbe46284e086182fe55 100644 (file)
@@ -1967,8 +1967,8 @@ public:
   /// This does not determine whether the function has been defined (e.g., in a
   /// previous definition); for that information, use isDefined.
   bool isThisDeclarationADefinition() const {
-    return IsDeleted || IsDefaulted || Body || IsLateTemplateParsed ||
-      WillHaveBody || hasDefiningAttr();
+    return IsDeleted || IsDefaulted || Body || HasSkippedBody ||
+           IsLateTemplateParsed || WillHaveBody || hasDefiningAttr();
   }
 
   /// doesThisDeclarationHaveABody - Returns whether this specific
diff --git a/test/Index/skipped_function_bodies.cpp b/test/Index/skipped_function_bodies.cpp
new file mode 100644 (file)
index 0000000..4258f71
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: env CINDEXTEST_SKIP_FUNCTION_BODIES=1 c-index-test -test-load-source all %s 2>&1 \
+// RUN: | FileCheck %s
+
+inline int with_body() { return 10; }
+inline int without_body();
+
+int x = with_body() + without_body();
+// CHECK: warning: inline function 'without_body' is not defined
+// CHECK-NOT: warning: inline function 'with_body' is not defined