diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
commit | 2b6b257f4e5503a7a2675bdb8735693db769f75c (patch) | |
tree | e85e046ae7003fe3bcc8b5454cd0fa3f7407b470 /test/ASTMerge | |
parent | b4348ed0b7e90c0831b925fbee00b5f179a99796 (diff) |
Notes
Diffstat (limited to 'test/ASTMerge')
-rw-r--r-- | test/ASTMerge/Inputs/anonymous-fields1.cpp | 5 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/anonymous-fields2.cpp | 9 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/class1.cpp | 3 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/class2.cpp | 3 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/inheritance-base.cpp | 7 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/init-ctors-classes.cpp | 19 | ||||
-rw-r--r-- | test/ASTMerge/anonymous-fields.cpp | 4 | ||||
-rw-r--r-- | test/ASTMerge/class.cpp | 12 | ||||
-rw-r--r-- | test/ASTMerge/inheritance.cpp | 8 | ||||
-rw-r--r-- | test/ASTMerge/init-ctors.cpp | 10 |
10 files changed, 72 insertions, 8 deletions
diff --git a/test/ASTMerge/Inputs/anonymous-fields1.cpp b/test/ASTMerge/Inputs/anonymous-fields1.cpp new file mode 100644 index 0000000000000..829bc0edd30a6 --- /dev/null +++ b/test/ASTMerge/Inputs/anonymous-fields1.cpp @@ -0,0 +1,5 @@ +class A { +public: + struct { int foo; } f; + struct { int foo; } g; +}; diff --git a/test/ASTMerge/Inputs/anonymous-fields2.cpp b/test/ASTMerge/Inputs/anonymous-fields2.cpp new file mode 100644 index 0000000000000..28ea46d98711b --- /dev/null +++ b/test/ASTMerge/Inputs/anonymous-fields2.cpp @@ -0,0 +1,9 @@ +class A { +public: + struct { int foo; } f; + struct { int foo; } g; +}; + +inline int useA(A &a) { + return (a.f.foo + a.g.foo); +} diff --git a/test/ASTMerge/Inputs/class1.cpp b/test/ASTMerge/Inputs/class1.cpp index 0cd6565f1a928..b0a7645cfe630 100644 --- a/test/ASTMerge/Inputs/class1.cpp +++ b/test/ASTMerge/Inputs/class1.cpp @@ -1,5 +1,6 @@ struct A { - int x; + public: + int x; }; struct B : A { diff --git a/test/ASTMerge/Inputs/class2.cpp b/test/ASTMerge/Inputs/class2.cpp index 5d5d9ca2333cb..2bed6d775bc46 100644 --- a/test/ASTMerge/Inputs/class2.cpp +++ b/test/ASTMerge/Inputs/class2.cpp @@ -1,5 +1,6 @@ struct A { - int x; + public: + int x; }; struct B : A { diff --git a/test/ASTMerge/Inputs/inheritance-base.cpp b/test/ASTMerge/Inputs/inheritance-base.cpp new file mode 100644 index 0000000000000..26fe42eb64da3 --- /dev/null +++ b/test/ASTMerge/Inputs/inheritance-base.cpp @@ -0,0 +1,7 @@ +class A +{ +public: + int x; + A(int _x) : x(_x) { + } +}; diff --git a/test/ASTMerge/Inputs/init-ctors-classes.cpp b/test/ASTMerge/Inputs/init-ctors-classes.cpp new file mode 100644 index 0000000000000..fd51f860634b5 --- /dev/null +++ b/test/ASTMerge/Inputs/init-ctors-classes.cpp @@ -0,0 +1,19 @@ +class A_base +{ +public: + int x; + A_base() : x(0) { + } + A_base(int _x) : x(static_cast<int>(_x)) { + } +}; + +class A : public A_base +{ +public: + int y; + struct { int z; }; + int array[2]; + A(int _x) : A_base(_x), y(0), z(1), array{{2},{3}} { + } +}; diff --git a/test/ASTMerge/anonymous-fields.cpp b/test/ASTMerge/anonymous-fields.cpp new file mode 100644 index 0000000000000..67afc29d07e5b --- /dev/null +++ b/test/ASTMerge/anonymous-fields.cpp @@ -0,0 +1,4 @@ +// RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/anonymous-fields1.cpp +// RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/anonymous-fields2.cpp +// RUN: %clang_cc1 -emit-obj -o /dev/null -ast-merge %t.1.ast -ast-merge %t.2.ast %s +// expected-no-diagnostics diff --git a/test/ASTMerge/class.cpp b/test/ASTMerge/class.cpp index 7b31187c469ea..a68a2d1d7690f 100644 --- a/test/ASTMerge/class.cpp +++ b/test/ASTMerge/class.cpp @@ -3,12 +3,12 @@ // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 -Wno-odr -Werror -// CHECK: class1.cpp:5:8: warning: type 'B' has incompatible definitions in different translation units -// CHECK: class1.cpp:6:9: note: field 'y' has type 'float' here -// CHECK: class2.cpp:6:7: note: field 'y' has type 'int' here +// CHECK: class1.cpp:6:8: warning: type 'B' has incompatible definitions in different translation units +// CHECK: class1.cpp:7:9: note: field 'y' has type 'float' here +// CHECK: class2.cpp:7:7: note: field 'y' has type 'int' here // FIXME: we should also complain about mismatched types on the method -// CHECK: class1.cpp:17:6: warning: type 'E' has incompatible definitions in different translation units -// CHECK: class1.cpp:18:3: note: enumerator 'b' with value 1 here -// CHECK: class2.cpp:11:3: note: enumerator 'a' with value 0 here +// CHECK: class1.cpp:18:6: warning: type 'E' has incompatible definitions in different translation units +// CHECK: class1.cpp:19:3: note: enumerator 'b' with value 1 here +// CHECK: class2.cpp:12:3: note: enumerator 'a' with value 0 here diff --git a/test/ASTMerge/inheritance.cpp b/test/ASTMerge/inheritance.cpp new file mode 100644 index 0000000000000..7fce82a736ab7 --- /dev/null +++ b/test/ASTMerge/inheritance.cpp @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -emit-pch -o %t.1.ast %S/Inputs/inheritance-base.cpp +// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -ast-merge %t.1.ast -fsyntax-only -verify %s +// expected-no-diagnostics + +class B : public A { + B(int _a) : A(_a) { + } +}; diff --git a/test/ASTMerge/init-ctors.cpp b/test/ASTMerge/init-ctors.cpp new file mode 100644 index 0000000000000..5f0ba4decd9ff --- /dev/null +++ b/test/ASTMerge/init-ctors.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -emit-pch -o %t.1.ast %S/Inputs/init-ctors-classes.cpp +// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++1z -ast-merge %t.1.ast -fsyntax-only -verify %s +// expected-no-diagnostics + +class B { + int method_1() { + A a(0); + return a.x; + } +}; |