diff options
author | Richard Trieu <rtrieu@google.com> | 2017-09-30 02:19:17 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2017-09-30 02:19:17 +0000 |
commit | 632796131d6a3adf49f8e00ec950e8516419ab36 (patch) | |
tree | 9c524a4a7efff37c8a1c841763a51c50eec9d090 /test | |
parent | 92f75f57f423c40de678cd0ba8a9d133adfb846b (diff) | |
download | clang-632796131d6a3adf49f8e00ec950e8516419ab36.tar.gz |
[ODRHash] Add base classes to hashing CXXRecordDecl.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@314581 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Modules/odr_hash.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/test/Modules/odr_hash.cpp b/test/Modules/odr_hash.cpp index a3ac510c32..8ff95d2566 100644 --- a/test/Modules/odr_hash.cpp +++ b/test/Modules/odr_hash.cpp @@ -1577,6 +1577,126 @@ using TemplateParameters::S6; #endif } // namespace TemplateParameters +namespace BaseClass { +#if defined(FIRST) +struct B1 {}; +struct S1 : B1 {}; +#elif defined(SECOND) +struct S1 {}; +#else +S1 s1; +// expected-error@second.h:* {{'BaseClass::S1' has different definitions in different modules; first difference is definition in module 'SecondModule' found 0 base classes}} +// expected-note@first.h:* {{but in 'FirstModule' found 1 base class}} +#endif + +#if defined(FIRST) +struct S2 {}; +#elif defined(SECOND) +struct B2 {}; +struct S2 : virtual B2 {}; +#else +S2 s2; +// expected-error@second.h:* {{'BaseClass::S2' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1 base class}} +// expected-note@first.h:* {{but in 'FirstModule' found 0 base classes}} +#endif + +#if defined(FIRST) +struct B3a {}; +struct S3 : B3a {}; +#elif defined(SECOND) +struct B3b {}; +struct S3 : virtual B3b {}; +#else +S3 s3; +// expected-error@second.h:* {{'BaseClass::S3' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1 virtual base class}} +// expected-note@first.h:* {{but in 'FirstModule' found 0 virtual base classes}} +#endif + +#if defined(FIRST) +struct B4a {}; +struct S4 : B4a {}; +#elif defined(SECOND) +struct B4b {}; +struct S4 : B4b {}; +#else +S4 s4; +// expected-error@second.h:* {{'BaseClass::S4' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1st base class with type 'BaseClass::B4b'}} +// expected-note@first.h:* {{but in 'FirstModule' found 1st base class with different type 'BaseClass::B4a'}} +#endif + +#if defined(FIRST) +struct B5a {}; +struct S5 : virtual B5a {}; +#elif defined(SECOND) +struct B5a {}; +struct S5 : B5a {}; +#else +S5 s5; +// expected-error@second.h:* {{'BaseClass::S5' has different definitions in different modules; first difference is definition in module 'SecondModule' found 0 virtual base classes}} +// expected-note@first.h:* {{but in 'FirstModule' found 1 virtual base class}} +#endif + +#if defined(FIRST) +struct B6a {}; +struct S6 : B6a {}; +#elif defined(SECOND) +struct B6a {}; +struct S6 : virtual B6a {}; +#else +S6 s6; +// expected-error@second.h:* {{'BaseClass::S6' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1 virtual base class}} +// expected-note@first.h:* {{but in 'FirstModule' found 0 virtual base classes}} +#endif + +#if defined(FIRST) +struct B7a {}; +struct S7 : protected B7a {}; +#elif defined(SECOND) +struct B7a {}; +struct S7 : B7a {}; +#else +S7 s7; +// expected-error@second.h:* {{'BaseClass::S7' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1st base class 'BaseClass::B7a' with no access specifier}} +// expected-note@first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B7a' with protected access specifier}} +#endif + +#if defined(FIRST) +struct B8a {}; +struct S8 : public B8a {}; +#elif defined(SECOND) +struct B8a {}; +struct S8 : private B8a {}; +#else +S8 s8; +// expected-error@second.h:* {{'BaseClass::S8' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1st base class 'BaseClass::B8a' with private access specifier}} +// expected-note@first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B8a' with public access specifier}} +#endif + +#if defined(FIRST) +struct B9a {}; +struct S9 : private B9a {}; +#elif defined(SECOND) +struct B9a {}; +struct S9 : public B9a {}; +#else +S9 s9; +// expected-error@second.h:* {{'BaseClass::S9' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1st base class 'BaseClass::B9a' with public access specifier}} +// expected-note@first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B9a' with private access specifier}} +#endif + +#if defined(FIRST) +struct B10a {}; +struct S10 : B10a {}; +#elif defined(SECOND) +struct B10a {}; +struct S10 : protected B10a {}; +#else +S10 s10; +// expected-error@second.h:* {{'BaseClass::S10' has different definitions in different modules; first difference is definition in module 'SecondModule' found 1st base class 'BaseClass::B10a' with protected access specifier}} +// expected-note@first.h:* {{but in 'FirstModule' found 1st base class 'BaseClass::B10a' with no access specifier}} +#endif +} // namespace BaseClass + // Interesting cases that should not cause errors. struct S should not error // while struct T should error at the access specifier mismatch at the end. namespace AllDecls { |