summaryrefslogtreecommitdiffstats
path: root/clang/test/Index/preamble_macro_template.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-07-19 16:10:42 +0000
committerDouglas Gregor <dgregor@apple.com>2011-07-19 16:10:42 +0000
commit925296b4c2cbb358c34323dfcffbea6d59eb9c1e (patch)
tree28ca61a9d6ea5b2b2bb8d96881618bc53182573f /clang/test/Index/preamble_macro_template.cpp
parentca3fc3883954b0c4468db7f72ec57713dc119bc5 (diff)
downloadbcm5719-llvm-925296b4c2cbb358c34323dfcffbea6d59eb9c1e.tar.gz
bcm5719-llvm-925296b4c2cbb358c34323dfcffbea6d59eb9c1e.zip
Revamp the SourceManager to separate the representation of parsed
source locations from source locations loaded from an AST/PCH file. Previously, loading an AST/PCH file involved carefully pre-allocating space at the beginning of the source manager for the source locations and FileIDs that correspond to the prefix, and then appending the source locations/FileIDs used for parsing the remaining translation unit. This design forced us into loading PCH files early, as a prefix, whic has become a rather significant limitation. This patch splits the SourceManager space into two parts: for source location "addresses", the lower values (growing upward) are used to describe parsed code, while upper values (growing downward) are used for source locations loaded from AST/PCH files. Similarly, positive FileIDs are used to describe parsed code while negative FileIDs are used to file/macro locations loaded from AST/PCH files. As a result, we can load PCH/AST files even during parsing, making various improvemnts in the future possible, e.g., teaching #include <foo.h> to look for and load <foo.h.gch> if it happens to be already available. This patch was originally written by Sebastian Redl, then brought forward to the modern age by Jonathan Turner, and finally polished/finished by me to be committed. llvm-svn: 135484
Diffstat (limited to 'clang/test/Index/preamble_macro_template.cpp')
-rw-r--r--clang/test/Index/preamble_macro_template.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/Index/preamble_macro_template.cpp b/clang/test/Index/preamble_macro_template.cpp
new file mode 100644
index 00000000000..dc98927101f
--- /dev/null
+++ b/clang/test/Index/preamble_macro_template.cpp
@@ -0,0 +1,15 @@
+template void foo(int *);
+
+int main() { }
+
+// RUN: c-index-test -write-pch %t.pch -x c++-header %S/Inputs/preamble_macro_template.h
+// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 local -I %S/Inputs -include %t %s | FileCheck %s
+// CHECK: preamble_macro_template.h:4:6: FunctionDecl=foo:4:6 (Definition) [Specialization of foo:4:6] Extent=[4:1 - 6:2]
+// CHECK: preamble_macro_template.h:4:13: ParmDecl=p:4:13 (Definition) Extent=[4:10 - 4:14]
+// CHECK: preamble_macro_template.h:4:16: UnexposedStmt= Extent=[4:16 - 6:2]
+// CHECK: preamble_macro_template.h:5:3: UnexposedExpr= Extent=[5:3 - 5:27]
+// CHECK: preamble_macro_template.h:1:21: UnexposedExpr= Extent=[1:21 - 5:27]
+// CHECK: preamble_macro_template.h:5:25: UnexposedExpr= Extent=[5:25 - 5:26]
+// CHECK: preamble_macro_template.h:5:25: UnexposedExpr= Extent=[5:25 - 5:26]
+// CHECK: preamble_macro_template.cpp:3:5: FunctionDecl=main:3:5 (Definition) Extent=[3:1 - 3:15]
+// CHECK: preamble_macro_template.cpp:3:12: UnexposedStmt= Extent=[3:12 - 3:15]
OpenPOWER on IntegriCloud