[libclang] Add a test to make sure we skip bodies properly from "#pragma once" headers.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 6 Dec 2012 23:04:24 +0000 (23:04 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 6 Dec 2012 23:04:24 +0000 (23:04 +0000)
llvm-svn: 169558

clang/test/Index/skip-parsed-bodies/compile_commands.json
clang/test/Index/skip-parsed-bodies/pragma_once.h [new file with mode: 0644]
clang/test/Index/skip-parsed-bodies/t2.cpp
clang/test/Index/skip-parsed-bodies/t3.cpp

index f091701..cb269f9 100644 (file)
 // 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-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val4'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_tsval'
 
 // CHECK-NEXT: [enteredMainFile]: t3.cpp
 // CHECK:      [indexDeclaration]: kind: c++-instance-method | name: method_decl | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
@@ -54,5 +58,9 @@
 // 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-NOT : [diagnostic]: {{.*}} undeclared identifier
+// 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-NOT:  [diagnostic]: {{.*}} undeclared identifier
diff --git a/clang/test/Index/skip-parsed-bodies/pragma_once.h b/clang/test/Index/skip-parsed-bodies/pragma_once.h
new file mode 100644 (file)
index 0000000..76d2d94
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once
+
+extern int some_val;
+
+template <typename T>
+struct TS {
+  int tsmeth() {
+    ++some_val; return undef_tsval;
+  }
+};