summaryrefslogtreecommitdiffstats
path: root/test/Index/skip-parsed-bodies
diff options
context:
space:
mode:
Diffstat (limited to 'test/Index/skip-parsed-bodies')
-rw-r--r--test/Index/skip-parsed-bodies/compile_commands.json71
-rw-r--r--test/Index/skip-parsed-bodies/imported.h5
-rw-r--r--test/Index/skip-parsed-bodies/lit.local.cfg1
-rw-r--r--test/Index/skip-parsed-bodies/pragma_once.h10
-rw-r--r--test/Index/skip-parsed-bodies/t.h30
-rw-r--r--test/Index/skip-parsed-bodies/t1.cpp1
-rw-r--r--test/Index/skip-parsed-bodies/t2.cpp3
-rw-r--r--test/Index/skip-parsed-bodies/t3.cpp3
8 files changed, 124 insertions, 0 deletions
diff --git a/test/Index/skip-parsed-bodies/compile_commands.json b/test/Index/skip-parsed-bodies/compile_commands.json
new file mode 100644
index 0000000..da5e777
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/compile_commands.json
@@ -0,0 +1,71 @@
+[
+{
+ "directory": ".",
+ "command": "/usr/bin/clang++ -fsyntax-only t1.cpp",
+ "file": "t1.cpp"
+},
+{
+ "directory": ".",
+ "command": "/usr/bin/clang++ -fsyntax-only t2.cpp -DBLAH",
+ "file": "t2.cpp"
+},
+{
+ "directory": ".",
+ "command": "/usr/bin/clang++ -fsyntax-only t3.cpp -DBLAH",
+ "file": "t2.cpp"
+}
+]
+
+// XFAIL: mingw32,win32
+// RUN: c-index-test -index-compile-db %s | FileCheck %s
+
+// CHECK: [enteredMainFile]: t1.cpp
+// CHECK: [indexDeclaration]: kind: c++-instance-method | name: method_decl | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./t.h:9:27
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isRedecl: 1 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
+// CHECK-NEXT: [indexEntityReference]: kind: c++-class | name: C |
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./t.h:15:5
+// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./t.h:19:5
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val1'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val2'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val3'
+
+// CHECK-NEXT: [enteredMainFile]: t2.cpp
+// CHECK: [indexDeclaration]: kind: c++-instance-method | name: method_decl | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isContainer: skipped
+// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
+// CHECK-NEXT: [indexEntityReference]: kind: c++-class | name: C |
+// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [ppIncludedFile]: ./pragma_once.h
+// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo2 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./t.h:25:5
+// CHECK: [indexDeclaration]: kind: c++-instance-method | name: tsmeth | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./pragma_once.h:8:7
+// CHECK: [indexDeclaration]: kind: function | name: imp_foo | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./imported.h:4:5
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val4'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_tsval'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_impval'
+
+// CHECK-NEXT: [enteredMainFile]: t3.cpp
+// CHECK: [indexDeclaration]: kind: c++-instance-method | name: method_decl | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
+// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: method_def2 | {{.*}} | isRedecl: 1 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS |
+// CHECK-NEXT: [indexEntityReference]: kind: c++-class | name: C |
+// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo1 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [ppIncludedFile]: ./pragma_once.h
+// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo2 | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NEXT: [indexDeclaration]: kind: variable | {{.*}} | loc: ./pragma_once.h:3:12
+// CHECK: [indexDeclaration]: kind: c++-instance-method | name: tsmeth | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NOT: [indexEntityReference]: kind: variable | name: some_val |
+// CHECK: [indexDeclaration]: kind: function | name: imp_foo | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NOT: [indexEntityReference]: kind: variable | name: some_val |
+// CHECK-NOT: [diagnostic]: {{.*}} undeclared identifier
diff --git a/test/Index/skip-parsed-bodies/imported.h b/test/Index/skip-parsed-bodies/imported.h
new file mode 100644
index 0000000..86673e1
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/imported.h
@@ -0,0 +1,5 @@
+extern int some_val;
+
+static inline int imp_foo() {
+ ++some_val; return undef_impval;
+}
diff --git a/test/Index/skip-parsed-bodies/lit.local.cfg b/test/Index/skip-parsed-bodies/lit.local.cfg
new file mode 100644
index 0000000..b38b51a
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/lit.local.cfg
@@ -0,0 +1 @@
+config.suffixes = ['.json']
diff --git a/test/Index/skip-parsed-bodies/pragma_once.h b/test/Index/skip-parsed-bodies/pragma_once.h
new file mode 100644
index 0000000..76d2d94
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/pragma_once.h
@@ -0,0 +1,10 @@
+#pragma once
+
+extern int some_val;
+
+template <typename T>
+struct TS {
+ int tsmeth() {
+ ++some_val; return undef_tsval;
+ }
+};
diff --git a/test/Index/skip-parsed-bodies/t.h b/test/Index/skip-parsed-bodies/t.h
new file mode 100644
index 0000000..a52b749
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/t.h
@@ -0,0 +1,30 @@
+#ifndef _T_H_
+#define _T_H_
+
+extern int some_val;
+
+namespace NS {
+ class C {
+ void method_decl();
+ int method_def1() { ++some_val; return undef_val1; }
+ inline int method_def2();
+ };
+}
+
+inline int NS::C::method_def2() {
+ ++some_val; return undef_val2;
+}
+
+static inline int foo1() {
+ ++some_val; return undef_val3;
+}
+
+#ifdef BLAH
+
+static inline int foo2() {
+ ++some_val; return undef_val4;
+}
+
+#endif
+
+#endif
diff --git a/test/Index/skip-parsed-bodies/t1.cpp b/test/Index/skip-parsed-bodies/t1.cpp
new file mode 100644
index 0000000..05918d7
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/t1.cpp
@@ -0,0 +1 @@
+#include "t.h"
diff --git a/test/Index/skip-parsed-bodies/t2.cpp b/test/Index/skip-parsed-bodies/t2.cpp
new file mode 100644
index 0000000..93fff44
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/t2.cpp
@@ -0,0 +1,3 @@
+#include "t.h"
+#include "pragma_once.h"
+#import "imported.h"
diff --git a/test/Index/skip-parsed-bodies/t3.cpp b/test/Index/skip-parsed-bodies/t3.cpp
new file mode 100644
index 0000000..93fff44
--- /dev/null
+++ b/test/Index/skip-parsed-bodies/t3.cpp
@@ -0,0 +1,3 @@
+#include "t.h"
+#include "pragma_once.h"
+#import "imported.h"
OpenPOWER on IntegriCloud