[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-15 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu closed 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-15 Thread Petr Hosek via cfe-commits

https://github.com/petrhosek approved this pull request.


https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-15 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu updated 
https://github.com/llvm/llvm-project/pull/66441

>From d6dfbf826e642d4d78062efe49a7221ee8ba0372 Mon Sep 17 00:00:00 2001
From: Zequan Wu 
Date: Fri, 15 Sep 2023 13:23:58 -0400
Subject: [PATCH] [Coverage] Add coverage for constructor member initializers.

Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.
---
 clang/lib/CodeGen/CoverageMappingGen.cpp | 11 +++-
 clang/test/CoverageMapping/ctor.cpp  | 34 
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/CoverageMapping/ctor.cpp

diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp 
b/clang/lib/CodeGen/CoverageMappingGen.cpp
index dd81be6d96c6ee9..dbdb638d8774d4c 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1032,11 +1032,20 @@ struct CounterCoverageMappingBuilder
 // lexer may not be able to report back precise token end locations for
 // these children nodes (llvm.org/PR39822), and moreover users will not be
 // able to see coverage for them.
+Counter BodyCounter = getRegionCounter(Body);
 bool Defaulted = false;
 if (auto *Method = dyn_cast(D))
   Defaulted = Method->isDefaulted();
+if (auto *Ctor = dyn_cast(D)) {
+  for (auto *Initializer : Ctor->inits()) {
+if (Initializer->isWritten()) {
+  auto *Init = Initializer->getInit();
+  propagateCounts(BodyCounter, Init);
+}
+  }
+}
 
-propagateCounts(getRegionCounter(Body), Body,
+propagateCounts(BodyCounter, Body,
 /*VisitChildren=*/!Defaulted);
 assert(RegionStack.empty() && "Regions entered but never exited");
   }
diff --git a/clang/test/CoverageMapping/ctor.cpp 
b/clang/test/CoverageMapping/ctor.cpp
new file mode 100644
index 000..1cf12cd738c2ccd
--- /dev/null
+++ b/clang/test/CoverageMapping/ctor.cpp
@@ -0,0 +1,34 @@
+// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false 
-fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping 
-emit-llvm-only -main-file-name continue.c %s | FileCheck %s
+
+class A {
+public:
+int a;
+A(int a): a(a) {}
+};
+class B: public A {
+public:
+int b;
+int c;
+B(int x, int y)
+: A(x), // CHECK:  File 0, [[@LINE]]:7 -> [[@LINE]]:11 
= #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:7 -> 
[[@LINE+1]]:13 = #0
+b(x == 0? 1: 2),// CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:19 
= #0
+// CHECK-NEXT: Branch,File 0, [[@LINE-1]]:7 -> 
[[@LINE-1]]:13 = #1, (#0 - #1)
+// CHECK-NEXT: Gap,File 0, [[@LINE-2]]:14 -> 
[[@LINE-2]]:15 = #1
+// CHECK-NEXT: File 0, [[@LINE-3]]:15 -> 
[[@LINE-3]]:16 = #1
+// CHECK-NEXT: File 0, [[@LINE-4]]:18 -> 
[[@LINE-4]]:19 = (#0 - #1)
+// CHECK-NEXT: File 0, [[@LINE+2]]:7 -> 
[[@LINE+8]]:8 = #0
+// CHECK-NEXT: File 0, [[@LINE+7]]:10 -> 
[[@LINE+7]]:12 = #0
+c([&]() {
+// CHECK:  File 0, [[@LINE-1]]:13 -> 
[[@LINE+5]]:6 = #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:13 -> 
[[@LINE+1]]:19 = #0
+if (y == 0) // CHECK-NEXT: Branch,File 0, [[@LINE]]:13 -> 
[[@LINE]]:19 = #1, (#0 - #1)
+return 1;   // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:20 -> 
[[@LINE]]:13 = #1
+return 2;   // CHECK-NEXT: File 0, [[@LINE-1]]:13 -> 
[[@LINE-1]]:21 = #1
+}()) {} // CHECK-NEXT: Gap,File 0, [[@LINE-2]]:22 -> 
[[@LINE-1]]:9 = (#0 - #1)
+};  // CHECK-NEXT: File 0, [[@LINE-2]]:9 -> 
[[@LINE-2]]:17 = (#0 - #1)
+
+int main() {
+B b(1,2);
+return 0;
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-15 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu updated 
https://github.com/llvm/llvm-project/pull/66441

>From be614f6412f0ddd9e4fea8842fbf0ddc389e6be6 Mon Sep 17 00:00:00 2001
From: Zequan Wu 
Date: Thu, 14 Sep 2023 18:07:31 -0400
Subject: [PATCH 1/2] [Coverage] Add coverage for constructor member
 initializers.

Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.
---
 clang/lib/CodeGen/CoverageMappingGen.cpp | 11 +++-
 clang/test/CoverageMapping/ctor.cpp  | 34 
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/CoverageMapping/ctor.cpp

diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp 
b/clang/lib/CodeGen/CoverageMappingGen.cpp
index dd81be6d96c6ee9..dbdb638d8774d4c 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1032,11 +1032,20 @@ struct CounterCoverageMappingBuilder
 // lexer may not be able to report back precise token end locations for
 // these children nodes (llvm.org/PR39822), and moreover users will not be
 // able to see coverage for them.
+Counter BodyCounter = getRegionCounter(Body);
 bool Defaulted = false;
 if (auto *Method = dyn_cast(D))
   Defaulted = Method->isDefaulted();
+if (auto *Ctor = dyn_cast(D)) {
+  for (auto *Initializer : Ctor->inits()) {
+if (Initializer->isWritten()) {
+  auto *Init = Initializer->getInit();
+  propagateCounts(BodyCounter, Init);
+}
+  }
+}
 
-propagateCounts(getRegionCounter(Body), Body,
+propagateCounts(BodyCounter, Body,
 /*VisitChildren=*/!Defaulted);
 assert(RegionStack.empty() && "Regions entered but never exited");
   }
diff --git a/clang/test/CoverageMapping/ctor.cpp 
b/clang/test/CoverageMapping/ctor.cpp
new file mode 100644
index 000..26debb43c4b5875
--- /dev/null
+++ b/clang/test/CoverageMapping/ctor.cpp
@@ -0,0 +1,34 @@
+// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false 
-fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping 
-emit-llvm-only -main-file-name continue.c %s | FileCheck %s
+
+class A {
+public:
+int a;
+A(int a): a(a) {}
+};
+class B: public A {
+public:
+int b;
+int c;
+B(int x, int y) // CHECK:  _ZN1BC2Eii:
+: A(x), // CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:11 
= #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:7 -> 
[[@LINE+1]]:13 = #0
+b(x == 0? 1: 2),// CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:19 
= #0
+// CHECK-NEXT: Branch,File 0, [[@LINE-1]]:7 -> 
[[@LINE-1]]:13 = #1, (#0 - #1)
+// CHECK-NEXT: Gap,File 0, [[@LINE-2]]:14 -> 
[[@LINE-2]]:15 = #1
+// CHECK-NEXT: File 0, [[@LINE-3]]:15 -> 
[[@LINE-3]]:16 = #1
+// CHECK-NEXT: File 0, [[@LINE-4]]:18 -> 
[[@LINE-4]]:19 = (#0 - #1)
+// CHECK-NEXT: File 0, [[@LINE+2]]:7 -> 
[[@LINE+8]]:8 = #0
+// CHECK-NEXT: File 0, [[@LINE+7]]:10 -> 
[[@LINE+7]]:12 = #0
+c([&]() {   // CHECK:  _ZZN1BC1EiiENKUlvE_clEv:
+// CHECK-NEXT: File 0, [[@LINE-1]]:13 -> 
[[@LINE+5]]:6 = #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:13 -> 
[[@LINE+1]]:19 = #0
+if (y == 0) // CHECK-NEXT: Branch,File 0, [[@LINE]]:13 -> 
[[@LINE]]:19 = #1, (#0 - #1)
+return 1;   // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:20 -> 
[[@LINE]]:13 = #1
+return 2;   // CHECK-NEXT: File 0, [[@LINE-1]]:13 -> 
[[@LINE-1]]:21 = #1
+}()) {} // CHECK-NEXT: Gap,File 0, [[@LINE-2]]:22 -> 
[[@LINE-1]]:9 = (#0 - #1)
+};  // CHECK-NEXT: File 0, [[@LINE-2]]:9 -> 
[[@LINE-2]]:17 = (#0 - #1)
+
+int main() {
+B b(1,2);
+return 0;
+}

>From 2f2ac259bb8e7f66e8494cfac6da9fcc4c2f9242 Mon Sep 17 00:00:00 2001
From: Zequan Wu 
Date: Thu, 14 Sep 2023 18:07:31 -0400
Subject: [PATCH 2/2] [Coverage] Add coverage for constructor member
 initializers.

Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.
---
 clang/test/CoverageMapping/ctor.cpp | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/clang/test/CoverageMapping/ctor.cpp 
b/clang/test/CoverageMapping/ctor.cpp
index 26debb43c4b5875..1cf12cd738c2ccd 100644
--- a/clang/test/CoverageMapping/ctor.cpp
+++ b/clang/test/CoverageMapping/ctor.cpp
@@ -9,8 +9,8 @@ class B: public A {
 public:
 int b;
 int c;
-B(int x, int y) // CHECK:  _ZN1BC2Eii:
-: A(x), // CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:11 
= #0
+B(int x, int y)
+: A(x), // CHECK:  File 0, [[@LINE]]:7 -> [[@LINE]]:11 
= #0
 // CHECK-NEXT: File 0, [[@LINE+1]]:7 -> 

[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu review_requested 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu review_requested 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu review_requested 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang


Changes
Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.
--
Full diff: https://github.com/llvm/llvm-project/pull/66441.diff

2 Files Affected:

- (modified) clang/lib/CodeGen/CoverageMappingGen.cpp (+10-1) 
- (added) clang/test/CoverageMapping/ctor.cpp (+34) 



diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp 
b/clang/lib/CodeGen/CoverageMappingGen.cpp
index dd81be6d96c6ee9..dbdb638d8774d4c 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1032,11 +1032,20 @@ struct CounterCoverageMappingBuilder
 // lexer may not be able to report back precise token end locations for
 // these children nodes (llvm.org/PR39822), and moreover users will not be
 // able to see coverage for them.
+Counter BodyCounter = getRegionCounter(Body);
 bool Defaulted = false;
 if (auto *Method = dyn_castlt;CXXMethodDeclgt;(D))
   Defaulted = Method-gt;isDefaulted();
+if (auto *Ctor = dyn_castlt;CXXConstructorDeclgt;(D)) {
+  for (auto *Initializer : Ctor-gt;inits()) {
+if (Initializer-gt;isWritten()) {
+  auto *Init = Initializer-gt;getInit();
+  propagateCounts(BodyCounter, Init);
+}
+  }
+}
 
-propagateCounts(getRegionCounter(Body), Body,
+propagateCounts(BodyCounter, Body,
 /*VisitChildren=*/!Defaulted);
 assert(RegionStack.empty() amp;amp; quot;Regions entered 
but never exitedquot;);
   }
diff --git a/clang/test/CoverageMapping/ctor.cpp 
b/clang/test/CoverageMapping/ctor.cpp
new file mode 100644
index 000..26debb43c4b5875
--- /dev/null
+++ b/clang/test/CoverageMapping/ctor.cpp
@@ -0,0 +1,34 @@
+// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false 
-fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping 
-emit-llvm-only -main-file-name continue.c %s | FileCheck %s
+
+class A {
+public:
+int a;
+A(int a): a(a) {}
+};
+class B: public A {
+public:
+int b;
+int c;
+B(int x, int y) // CHECK:  _ZN1BC2Eii:
+: A(x), // CHECK-NEXT: File 0, [[@LINE]]:7 -gt; 
[[@LINE]]:11 = #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:7 -gt; 
[[@LINE+1]]:13 = #0
+b(x == 0? 1: 2),// CHECK-NEXT: File 0, [[@LINE]]:7 -gt; 
[[@LINE]]:19 = #0
+// CHECK-NEXT: Branch,File 0, [[@LINE-1]]:7 
-gt; [[@LINE-1]]:13 = #1, (#0 - #1)
+// CHECK-NEXT: Gap,File 0, [[@LINE-2]]:14 
-gt; [[@LINE-2]]:15 = #1
+// CHECK-NEXT: File 0, [[@LINE-3]]:15 -gt; 
[[@LINE-3]]:16 = #1
+// CHECK-NEXT: File 0, [[@LINE-4]]:18 -gt; 
[[@LINE-4]]:19 = (#0 - #1)
+// CHECK-NEXT: File 0, [[@LINE+2]]:7 -gt; 
[[@LINE+8]]:8 = #0
+// CHECK-NEXT: File 0, [[@LINE+7]]:10 -gt; 
[[@LINE+7]]:12 = #0
+c([amp;]() {   // CHECK:  _ZZN1BC1EiiENKUlvE_clEv:
+// CHECK-NEXT: File 0, [[@LINE-1]]:13 -gt; 
[[@LINE+5]]:6 = #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:13 -gt; 
[[@LINE+1]]:19 = #0
+if (y == 0) // CHECK-NEXT: Branch,File 0, [[@LINE]]:13 
-gt; [[@LINE]]:19 = #1, (#0 - #1)
+return 1;   // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:20 
-gt; [[@LINE]]:13 = #1
+return 2;   // CHECK-NEXT: File 0, [[@LINE-1]]:13 -gt; 
[[@LINE-1]]:21 = #1
+}()) {} // CHECK-NEXT: Gap,File 0, [[@LINE-2]]:22 
-gt; [[@LINE-1]]:9 = (#0 - #1)
+};  // CHECK-NEXT: File 0, [[@LINE-2]]:9 -gt; 
[[@LINE-2]]:17 = (#0 - #1)
+
+int main() {
+B b(1,2);
+return 0;
+}




https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread via cfe-commits

https://github.com/llvmbot labeled 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread via cfe-commits

https://github.com/llvmbot labeled 
https://github.com/llvm/llvm-project/pull/66441
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Coverage] Add coverage for constructor member initializers. (PR #66441)

2023-09-14 Thread Zequan Wu via cfe-commits

https://github.com/ZequanWu created 
https://github.com/llvm/llvm-project/pull/66441:

Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.

>From be614f6412f0ddd9e4fea8842fbf0ddc389e6be6 Mon Sep 17 00:00:00 2001
From: Zequan Wu 
Date: Thu, 14 Sep 2023 18:07:31 -0400
Subject: [PATCH] [Coverage] Add coverage for constructor member initializers.

Before, constructor member initializers are shown as not covered. This adds 
coverage info for them.
---
 clang/lib/CodeGen/CoverageMappingGen.cpp | 11 +++-
 clang/test/CoverageMapping/ctor.cpp  | 34 
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/CoverageMapping/ctor.cpp

diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp 
b/clang/lib/CodeGen/CoverageMappingGen.cpp
index dd81be6d96c6ee9..dbdb638d8774d4c 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1032,11 +1032,20 @@ struct CounterCoverageMappingBuilder
 // lexer may not be able to report back precise token end locations for
 // these children nodes (llvm.org/PR39822), and moreover users will not be
 // able to see coverage for them.
+Counter BodyCounter = getRegionCounter(Body);
 bool Defaulted = false;
 if (auto *Method = dyn_cast(D))
   Defaulted = Method->isDefaulted();
+if (auto *Ctor = dyn_cast(D)) {
+  for (auto *Initializer : Ctor->inits()) {
+if (Initializer->isWritten()) {
+  auto *Init = Initializer->getInit();
+  propagateCounts(BodyCounter, Init);
+}
+  }
+}
 
-propagateCounts(getRegionCounter(Body), Body,
+propagateCounts(BodyCounter, Body,
 /*VisitChildren=*/!Defaulted);
 assert(RegionStack.empty() && "Regions entered but never exited");
   }
diff --git a/clang/test/CoverageMapping/ctor.cpp 
b/clang/test/CoverageMapping/ctor.cpp
new file mode 100644
index 000..26debb43c4b5875
--- /dev/null
+++ b/clang/test/CoverageMapping/ctor.cpp
@@ -0,0 +1,34 @@
+// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false 
-fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping 
-emit-llvm-only -main-file-name continue.c %s | FileCheck %s
+
+class A {
+public:
+int a;
+A(int a): a(a) {}
+};
+class B: public A {
+public:
+int b;
+int c;
+B(int x, int y) // CHECK:  _ZN1BC2Eii:
+: A(x), // CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:11 
= #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:7 -> 
[[@LINE+1]]:13 = #0
+b(x == 0? 1: 2),// CHECK-NEXT: File 0, [[@LINE]]:7 -> [[@LINE]]:19 
= #0
+// CHECK-NEXT: Branch,File 0, [[@LINE-1]]:7 -> 
[[@LINE-1]]:13 = #1, (#0 - #1)
+// CHECK-NEXT: Gap,File 0, [[@LINE-2]]:14 -> 
[[@LINE-2]]:15 = #1
+// CHECK-NEXT: File 0, [[@LINE-3]]:15 -> 
[[@LINE-3]]:16 = #1
+// CHECK-NEXT: File 0, [[@LINE-4]]:18 -> 
[[@LINE-4]]:19 = (#0 - #1)
+// CHECK-NEXT: File 0, [[@LINE+2]]:7 -> 
[[@LINE+8]]:8 = #0
+// CHECK-NEXT: File 0, [[@LINE+7]]:10 -> 
[[@LINE+7]]:12 = #0
+c([&]() {   // CHECK:  _ZZN1BC1EiiENKUlvE_clEv:
+// CHECK-NEXT: File 0, [[@LINE-1]]:13 -> 
[[@LINE+5]]:6 = #0
+// CHECK-NEXT: File 0, [[@LINE+1]]:13 -> 
[[@LINE+1]]:19 = #0
+if (y == 0) // CHECK-NEXT: Branch,File 0, [[@LINE]]:13 -> 
[[@LINE]]:19 = #1, (#0 - #1)
+return 1;   // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:20 -> 
[[@LINE]]:13 = #1
+return 2;   // CHECK-NEXT: File 0, [[@LINE-1]]:13 -> 
[[@LINE-1]]:21 = #1
+}()) {} // CHECK-NEXT: Gap,File 0, [[@LINE-2]]:22 -> 
[[@LINE-1]]:9 = (#0 - #1)
+};  // CHECK-NEXT: File 0, [[@LINE-2]]:9 -> 
[[@LINE-2]]:17 = (#0 - #1)
+
+int main() {
+B b(1,2);
+return 0;
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits