summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/Inputs
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-07-16 23:52:46 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-07-16 23:52:46 +0000
commitbf0b1aaf33a57a808c3a9b2838a372e9ba15b048 (patch)
tree6668d592e2905c65fab4b1aa0c0d43efd945b4ed /test/CodeGenCXX/Inputs
parent08d6bbe7c0f7c77fd2e4b7e6a93c29dbfcfce082 (diff)
DebugInfo: Forward HandleTagDeclRequiredDefinition through MultiplexConsumer to fix debug info emission in the presence of plugins.
When plugins are used the Multiplex(AST)Consumer is employed to dispatch to both the plugin ASTConsumers and the IRGen ASTConsumer. It wasn't dispatching a critical call for debug info, resulting in plugin users having a negative debugging experience. While I'm here, forward a bunch of other missing calls through the consumer that seem like they should be there. To test this, use the example plugin (requires plugins and examples) and split the test case up so that the plugin testing can be done under that requirement while the non-plugin testing will execute even in builds that don't include plugin support or examples. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213213 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/Inputs')
-rw-r--r--test/CodeGenCXX/Inputs/debug-info-class-limited.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/CodeGenCXX/Inputs/debug-info-class-limited.cpp b/test/CodeGenCXX/Inputs/debug-info-class-limited.cpp
new file mode 100644
index 0000000000..31a026101b
--- /dev/null
+++ b/test/CodeGenCXX/Inputs/debug-info-class-limited.cpp
@@ -0,0 +1,49 @@
+
+// CHECK-DAG: [ DW_TAG_structure_type ] [PR16214] [line [[@LINE+1]], {{.*}} [def]
+struct PR16214 {
+ int i;
+};
+
+typedef PR16214 bar;
+
+bar *a;
+bar b;
+
+namespace PR14467 {
+// CHECK-DAG: [ DW_TAG_structure_type ] [foo] [line [[@LINE+1]], {{.*}} [def]
+struct foo {
+};
+
+foo *bar(foo *a) {
+ foo *b = new foo(*a);
+ return b;
+}
+}
+
+namespace test1 {
+// CHECK-DAG: [ DW_TAG_structure_type ] [foo] [line [[@LINE+1]], {{.*}} [def]
+struct foo {
+};
+
+extern int bar(foo *a);
+int baz(foo *a) {
+ return bar(a);
+}
+}
+
+namespace test2 {
+// FIXME: if we were a bit fancier, we could realize that the 'foo' type is only
+// required because of the 'bar' type which is not required at all (or might
+// only be required to be declared)
+// CHECK-DAG: [ DW_TAG_structure_type ] [foo] [line [[@LINE+1]], {{.*}} [def]
+struct foo {
+};
+
+struct bar {
+ foo f;
+};
+
+void func() {
+ foo *f;
+}
+}