2464 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include <cassert>10#include "support/timer.h"11 12// This test explicitly tests dynamic cast with types that have inaccessible13// bases.14#if defined(__clang__)15# pragma clang diagnostic ignored "-Winaccessible-base"16#elif defined(__GNUC__)17# pragma GCC diagnostic ignored "-Winaccessible-base"18#endif19 20/*21 22A1 A2 A323 24*/25 26namespace t127{28 29struct A130{31 char _[43981];32 virtual ~A1() {}33 34 A1* getA1() {return this;}35};36 37struct A238{39 char _[34981];40 virtual ~A2() {}41 42 A2* getA2() {return this;}43};44 45struct A346{47 char _[93481];48 virtual ~A3() {}49 50 A3* getA3() {return this;}51};52 53void test()54{55 A1 a1;56 A2 a2;57 A3 a3;58 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());59 assert(dynamic_cast<A1*>(a2.getA2()) == 0);60 assert(dynamic_cast<A1*>(a3.getA3()) == 0);61 assert(dynamic_cast<A2*>(a1.getA1()) == 0);62 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());63 assert(dynamic_cast<A2*>(a3.getA3()) == 0);64 assert(dynamic_cast<A3*>(a1.getA1()) == 0);65 assert(dynamic_cast<A3*>(a2.getA2()) == 0);66 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());67}68 69} // t170 71/*72 73A1 A274|75A376 77*/78 79namespace t280{81 82struct A183{84 char _[43981];85 virtual ~A1() {}86 87 A1* getA1() {return this;}88};89 90struct A291{92 char _[34981];93 virtual ~A2() {}94 95 A2* getA2() {return this;}96};97 98struct A399 : public A1100{101 char _[93481];102 virtual ~A3() {}103 104 A3* getA3() {return this;}105};106 107void test()108{109 A1 a1;110 A2 a2;111 A3 a3;112 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());113 assert(dynamic_cast<A1*>(a2.getA2()) == 0);114 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());115 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());116 117 assert(dynamic_cast<A2*>(a1.getA1()) == 0);118 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());119 assert(dynamic_cast<A2*>(a3.getA1()) == 0);120 assert(dynamic_cast<A2*>(a3.getA3()) == 0);121 122 assert(dynamic_cast<A3*>(a1.getA1()) == 0);123 assert(dynamic_cast<A3*>(a2.getA2()) == 0);124 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());125 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());126}127 128} // t2129 130namespace t3131{132 133struct A1134{135 char _[43981];136 virtual ~A1() {}137 138 A1* getA1() {return this;}139};140 141struct A2142{143 char _[34981];144 virtual ~A2() {}145 146 A2* getA2() {return this;}147};148 149struct A3150 : public virtual A1151{152 char _[93481];153 virtual ~A3() {}154 155 A3* getA3() {return this;}156};157 158void test()159{160 A1 a1;161 A2 a2;162 A3 a3;163 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());164 assert(dynamic_cast<A1*>(a2.getA2()) == 0);165 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());166 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());167 168 assert(dynamic_cast<A2*>(a1.getA1()) == 0);169 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());170 assert(dynamic_cast<A2*>(a3.getA1()) == 0);171 assert(dynamic_cast<A2*>(a3.getA3()) == 0);172 173 assert(dynamic_cast<A3*>(a1.getA1()) == 0);174 assert(dynamic_cast<A3*>(a2.getA2()) == 0);175 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());176 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());177}178 179} // t3180 181namespace t4182{183 184struct A1185{186 char _[43981];187 virtual ~A1() {}188 189 A1* getA1() {return this;}190};191 192struct A2193{194 char _[34981];195 virtual ~A2() {}196 197 A2* getA2() {return this;}198};199 200struct A3201 : private A1202{203 char _[93481];204 virtual ~A3() {}205 206 A1* getA1() {return this;}207 A3* getA3() {return this;}208};209 210void test()211{212 A1 a1;213 A2 a2;214 A3 a3;215 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());216 assert(dynamic_cast<A1*>(a2.getA2()) == 0);217 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());218 219 assert(dynamic_cast<A2*>(a1.getA1()) == 0);220 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());221 assert(dynamic_cast<A2*>(a3.getA1()) == 0);222 assert(dynamic_cast<A2*>(a3.getA3()) == 0);223 224 assert(dynamic_cast<A3*>(a1.getA1()) == 0);225 assert(dynamic_cast<A3*>(a2.getA2()) == 0);226 assert(dynamic_cast<A3*>(a3.getA1()) == 0);227 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());228}229 230} // t4231 232namespace t5233{234 235struct A1236{237 char _[43981];238 virtual ~A1() {}239 240 A1* getA1() {return this;}241};242 243struct A2244{245 char _[34981];246 virtual ~A2() {}247 248 A2* getA2() {return this;}249};250 251struct A3252 : private virtual A1253{254 char _[93481];255 virtual ~A3() {}256 257 A1* getA1() {return this;}258 A3* getA3() {return this;}259};260 261void test()262{263 A1 a1;264 A2 a2;265 A3 a3;266 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());267 assert(dynamic_cast<A1*>(a2.getA2()) == 0);268 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());269 270 assert(dynamic_cast<A2*>(a1.getA1()) == 0);271 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());272 assert(dynamic_cast<A2*>(a3.getA1()) == 0);273 assert(dynamic_cast<A2*>(a3.getA3()) == 0);274 275 assert(dynamic_cast<A3*>(a1.getA1()) == 0);276 assert(dynamic_cast<A3*>(a2.getA2()) == 0);277 assert(dynamic_cast<A3*>(a3.getA1()) == 0);278 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());279}280 281} // t5282 283/*284 285A1 A2286 \ /287 A3288 289*/290 291namespace t6292{293 294struct A1295{296 char _[43981];297 virtual ~A1() {}298 299 A1* getA1() {return this;}300};301 302struct A2303{304 char _[34981];305 virtual ~A2() {}306 307 A2* getA2() {return this;}308};309 310struct A3311 : public A1,312 public A2313{314 char _[93481];315 virtual ~A3() {}316 317 A1* getA1() {return this;}318 A2* getA2() {return this;}319 A3* getA3() {return this;}320};321 322void test()323{324 A1 a1;325 A2 a2;326 A3 a3;327 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());328 assert(dynamic_cast<A1*>(a2.getA2()) == 0);329 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());330 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());331 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());332 333 assert(dynamic_cast<A2*>(a1.getA1()) == 0);334 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());335 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());336 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());337 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());338 339 assert(dynamic_cast<A3*>(a1.getA1()) == 0);340 assert(dynamic_cast<A3*>(a2.getA2()) == 0);341 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());342 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());343 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());344}345 346} // t6347 348namespace t7349{350 351struct A1352{353 char _[43981];354 virtual ~A1() {}355 356 A1* getA1() {return this;}357};358 359struct A2360{361 char _[34981];362 virtual ~A2() {}363 364 A2* getA2() {return this;}365};366 367struct A3368 : public virtual A1,369 public A2370{371 char _[93481];372 virtual ~A3() {}373 374 A1* getA1() {return this;}375 A2* getA2() {return this;}376 A3* getA3() {return this;}377};378 379void test()380{381 A1 a1;382 A2 a2;383 A3 a3;384 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());385 assert(dynamic_cast<A1*>(a2.getA2()) == 0);386 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());387 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());388 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());389 390 assert(dynamic_cast<A2*>(a1.getA1()) == 0);391 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());392 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());393 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());394 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());395 396 assert(dynamic_cast<A3*>(a1.getA1()) == 0);397 assert(dynamic_cast<A3*>(a2.getA2()) == 0);398 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());399 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());400 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());401}402 403} // t7404 405namespace t8406{407 408struct A1409{410 char _[43981];411 virtual ~A1() {}412 413 A1* getA1() {return this;}414};415 416struct A2417{418 char _[34981];419 virtual ~A2() {}420 421 A2* getA2() {return this;}422};423 424struct A3425 : private A1,426 public A2427{428 char _[93481];429 virtual ~A3() {}430 431 A1* getA1() {return this;}432 A2* getA2() {return this;}433 A3* getA3() {return this;}434};435 436void test()437{438 A1 a1;439 A2 a2;440 A3 a3;441 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());442 assert(dynamic_cast<A1*>(a2.getA2()) == 0);443 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());444 assert(dynamic_cast<A1*>(a3.getA2()) == 0);445 446 assert(dynamic_cast<A2*>(a1.getA1()) == 0);447 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());448 assert(dynamic_cast<A2*>(a3.getA1()) == 0);449 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());450 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());451 452 assert(dynamic_cast<A3*>(a1.getA1()) == 0);453 assert(dynamic_cast<A3*>(a2.getA2()) == 0);454 assert(dynamic_cast<A3*>(a3.getA1()) == 0);455 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());456 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());457}458 459} // t8460 461namespace t9462{463 464struct A1465{466 char _[43981];467 virtual ~A1() {}468 469 A1* getA1() {return this;}470};471 472struct A2473{474 char _[34981];475 virtual ~A2() {}476 477 A2* getA2() {return this;}478};479 480struct A3481 : private virtual A1,482 public A2483{484 char _[93481];485 virtual ~A3() {}486 487 A1* getA1() {return this;}488 A2* getA2() {return this;}489 A3* getA3() {return this;}490};491 492void test()493{494 A1 a1;495 A2 a2;496 A3 a3;497 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());498 assert(dynamic_cast<A1*>(a2.getA2()) == 0);499 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());500 assert(dynamic_cast<A1*>(a3.getA2()) == 0);501 502 assert(dynamic_cast<A2*>(a1.getA1()) == 0);503 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());504 assert(dynamic_cast<A2*>(a3.getA1()) == 0);505 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());506 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());507 508 assert(dynamic_cast<A3*>(a1.getA1()) == 0);509 assert(dynamic_cast<A3*>(a2.getA2()) == 0);510 assert(dynamic_cast<A3*>(a3.getA1()) == 0);511 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());512 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());513}514 515} // t9516 517namespace t10518{519 520struct A1521{522 char _[43981];523 virtual ~A1() {}524 525 A1* getA1() {return this;}526};527 528struct A2529{530 char _[34981];531 virtual ~A2() {}532 533 A2* getA2() {return this;}534};535 536struct A3537 : public virtual A1,538 public virtual A2539{540 char _[93481];541 virtual ~A3() {}542 543 A1* getA1() {return this;}544 A2* getA2() {return this;}545 A3* getA3() {return this;}546};547 548void test()549{550 A1 a1;551 A2 a2;552 A3 a3;553 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());554 assert(dynamic_cast<A1*>(a2.getA2()) == 0);555 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());556 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());557 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());558 559 assert(dynamic_cast<A2*>(a1.getA1()) == 0);560 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());561 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());562 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());563 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());564 565 assert(dynamic_cast<A3*>(a1.getA1()) == 0);566 assert(dynamic_cast<A3*>(a2.getA2()) == 0);567 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());568 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());569 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());570}571 572} // t10573 574namespace t11575{576 577struct A1578{579 char _[43981];580 virtual ~A1() {}581 582 A1* getA1() {return this;}583};584 585struct A2586{587 char _[34981];588 virtual ~A2() {}589 590 A2* getA2() {return this;}591};592 593struct A3594 : private A1,595 public virtual A2596{597 char _[93481];598 virtual ~A3() {}599 600 A1* getA1() {return this;}601 A2* getA2() {return this;}602 A3* getA3() {return this;}603};604 605void test()606{607 A1 a1;608 A2 a2;609 A3 a3;610 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());611 assert(dynamic_cast<A1*>(a2.getA2()) == 0);612 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());613 assert(dynamic_cast<A1*>(a3.getA2()) == 0);614 615 assert(dynamic_cast<A2*>(a1.getA1()) == 0);616 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());617 assert(dynamic_cast<A2*>(a3.getA1()) == 0);618 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());619 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());620 621 assert(dynamic_cast<A3*>(a1.getA1()) == 0);622 assert(dynamic_cast<A3*>(a2.getA2()) == 0);623 assert(dynamic_cast<A3*>(a3.getA1()) == 0);624 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());625 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());626}627 628} // t11629 630namespace t12631{632 633struct A1634{635 char _[43981];636 virtual ~A1() {}637 638 A1* getA1() {return this;}639};640 641struct A2642{643 char _[34981];644 virtual ~A2() {}645 646 A2* getA2() {return this;}647};648 649struct A3650 : private virtual A1,651 public virtual A2652{653 char _[93481];654 virtual ~A3() {}655 656 A1* getA1() {return this;}657 A2* getA2() {return this;}658 A3* getA3() {return this;}659};660 661void test()662{663 A1 a1;664 A2 a2;665 A3 a3;666 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());667 assert(dynamic_cast<A1*>(a2.getA2()) == 0);668 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());669 assert(dynamic_cast<A1*>(a3.getA2()) == 0);670 671 assert(dynamic_cast<A2*>(a1.getA1()) == 0);672 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());673 assert(dynamic_cast<A2*>(a3.getA1()) == 0);674 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());675 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());676 677 assert(dynamic_cast<A3*>(a1.getA1()) == 0);678 assert(dynamic_cast<A3*>(a2.getA2()) == 0);679 assert(dynamic_cast<A3*>(a3.getA1()) == 0);680 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());681 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());682}683 684} // t12685 686namespace t13687{688 689struct A1690{691 char _[43981];692 virtual ~A1() {}693 694 A1* getA1() {return this;}695};696 697struct A2698{699 char _[34981];700 virtual ~A2() {}701 702 A2* getA2() {return this;}703};704 705struct A3706 : private A1,707 private A2708{709 char _[93481];710 virtual ~A3() {}711 712 A1* getA1() {return this;}713 A2* getA2() {return this;}714 A3* getA3() {return this;}715};716 717void test()718{719 A1 a1;720 A2 a2;721 A3 a3;722 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());723 assert(dynamic_cast<A1*>(a2.getA2()) == 0);724 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());725 assert(dynamic_cast<A1*>(a3.getA2()) == 0);726 727 assert(dynamic_cast<A2*>(a1.getA1()) == 0);728 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());729 assert(dynamic_cast<A2*>(a3.getA1()) == 0);730 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());731 732 assert(dynamic_cast<A3*>(a1.getA1()) == 0);733 assert(dynamic_cast<A3*>(a2.getA2()) == 0);734 assert(dynamic_cast<A3*>(a3.getA1()) == 0);735 assert(dynamic_cast<A3*>(a3.getA2()) == 0);736 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());737}738 739} // t13740 741namespace t14742{743 744struct A1745{746 char _[43981];747 virtual ~A1() {}748 749 A1* getA1() {return this;}750};751 752struct A2753{754 char _[34981];755 virtual ~A2() {}756 757 A2* getA2() {return this;}758};759 760struct A3761 : private virtual A1,762 private A2763{764 char _[93481];765 virtual ~A3() {}766 767 A1* getA1() {return this;}768 A2* getA2() {return this;}769 A3* getA3() {return this;}770};771 772void test()773{774 A1 a1;775 A2 a2;776 A3 a3;777 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());778 assert(dynamic_cast<A1*>(a2.getA2()) == 0);779 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());780 assert(dynamic_cast<A1*>(a3.getA2()) == 0);781 782 assert(dynamic_cast<A2*>(a1.getA1()) == 0);783 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());784 assert(dynamic_cast<A2*>(a3.getA1()) == 0);785 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());786 787 assert(dynamic_cast<A3*>(a1.getA1()) == 0);788 assert(dynamic_cast<A3*>(a2.getA2()) == 0);789 assert(dynamic_cast<A3*>(a3.getA1()) == 0);790 assert(dynamic_cast<A3*>(a3.getA2()) == 0);791 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());792}793 794} // t14795 796namespace t15797{798 799struct A1800{801 char _[43981];802 virtual ~A1() {}803 804 A1* getA1() {return this;}805};806 807struct A2808{809 char _[34981];810 virtual ~A2() {}811 812 A2* getA2() {return this;}813};814 815struct A3816 : private virtual A1,817 private virtual A2818{819 char _[93481];820 virtual ~A3() {}821 822 A1* getA1() {return this;}823 A2* getA2() {return this;}824 A3* getA3() {return this;}825};826 827void test()828{829 A1 a1;830 A2 a2;831 A3 a3;832 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());833 assert(dynamic_cast<A1*>(a2.getA2()) == 0);834 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());835 assert(dynamic_cast<A1*>(a3.getA2()) == 0);836 837 assert(dynamic_cast<A2*>(a1.getA1()) == 0);838 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());839 assert(dynamic_cast<A2*>(a3.getA1()) == 0);840 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());841 842 assert(dynamic_cast<A3*>(a1.getA1()) == 0);843 assert(dynamic_cast<A3*>(a2.getA2()) == 0);844 assert(dynamic_cast<A3*>(a3.getA1()) == 0);845 assert(dynamic_cast<A3*>(a3.getA2()) == 0);846 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());847}848 849} // t15850 851/*852 853A1854|855A2856|857A3858 859*/860 861namespace t16862{863 864struct A1865{866 char _[43981];867 virtual ~A1() {}868 869 A1* getA1() {return this;}870};871 872struct A2873 : public A1874{875 char _[34981];876 virtual ~A2() {}877 878 A1* getA1() {return this;}879 A2* getA2() {return this;}880};881 882struct A3883 : public A2884{885 char _[93481];886 virtual ~A3() {}887 888 A1* getA1() {return this;}889 A2* getA2() {return this;}890 A3* getA3() {return this;}891};892 893void test()894{895 A1 a1;896 A2 a2;897 A3 a3;898 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());899 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());900 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());901 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());902 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());903 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());904 905 assert(dynamic_cast<A2*>(a1.getA1()) == 0);906 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());907 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());908 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());909 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());910 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());911 912 assert(dynamic_cast<A3*>(a1.getA1()) == 0);913 assert(dynamic_cast<A3*>(a2.getA1()) == 0);914 assert(dynamic_cast<A3*>(a2.getA2()) == 0);915 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());916 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());917 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());918}919 920} // t16921 922namespace t17923{924 925struct A1926{927 char _[43981];928 virtual ~A1() {}929 930 A1* getA1() {return this;}931};932 933struct A2934 : public virtual A1935{936 char _[34981];937 virtual ~A2() {}938 939 A1* getA1() {return this;}940 A2* getA2() {return this;}941};942 943struct A3944 : public A2945{946 char _[93481];947 virtual ~A3() {}948 949 A1* getA1() {return this;}950 A2* getA2() {return this;}951 A3* getA3() {return this;}952};953 954void test()955{956 A1 a1;957 A2 a2;958 A3 a3;959 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());960 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());961 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());962 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());963 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());964 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());965 966 assert(dynamic_cast<A2*>(a1.getA1()) == 0);967 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());968 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());969 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());970 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());971 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());972 973 assert(dynamic_cast<A3*>(a1.getA1()) == 0);974 assert(dynamic_cast<A3*>(a2.getA1()) == 0);975 assert(dynamic_cast<A3*>(a2.getA2()) == 0);976 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());977 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());978 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());979}980 981} // t17982 983namespace t18984{985 986struct A1987{988 char _[43981];989 virtual ~A1() {}990 991 A1* getA1() {return this;}992};993 994struct A2995 : private A1996{997 char _[34981];998 virtual ~A2() {}999 1000 A1* getA1() {return this;}1001 A2* getA2() {return this;}1002};1003 1004struct A31005 : public A21006{1007 char _[93481];1008 virtual ~A3() {}1009 1010 A2* getA2() {return this;}1011 A3* getA3() {return this;}1012};1013 1014void test()1015{1016 A1 a1;1017 A2 a2;1018 A3 a3;1019 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1020 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1021 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1022 1023 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1024 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1025 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1026 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1027 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1028 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1029 1030 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1031 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1032 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1033 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1034 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1035 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1036}1037 1038} // t181039 1040namespace t191041{1042 1043struct A11044{1045 char _[43981];1046 virtual ~A1() {}1047 1048 A1* getA1() {return this;}1049};1050 1051struct A21052 : protected virtual A11053{1054 char _[34981];1055 virtual ~A2() {}1056 1057 A1* getA1() {return this;}1058 A2* getA2() {return this;}1059};1060 1061struct A31062 : public A21063{1064 char _[93481];1065 virtual ~A3() {}1066 1067 A2* getA2() {return this;}1068 A3* getA3() {return this;}1069};1070 1071void test()1072{1073 A1 a1;1074 A2 a2;1075 A3 a3;1076 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1077 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1078 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1079 1080 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1081 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1082 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1083 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1084 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1085 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1086 1087 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1088 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1089 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1090 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1091 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1092 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1093}1094 1095} // t191096 1097namespace t201098{1099 1100struct A11101{1102 char _[43981];1103 virtual ~A1() {}1104 1105 A1* getA1() {return this;}1106};1107 1108struct A21109 : public virtual A11110{1111 char _[34981];1112 virtual ~A2() {}1113 1114 A1* getA1() {return this;}1115 A2* getA2() {return this;}1116};1117 1118struct A31119 : public virtual A21120{1121 char _[93481];1122 virtual ~A3() {}1123 1124 A1* getA1() {return this;}1125 A2* getA2() {return this;}1126 A3* getA3() {return this;}1127};1128 1129void test()1130{1131 A1 a1;1132 A2 a2;1133 A3 a3;1134 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1135 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1136 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1137 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1138 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());1139 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());1140 1141 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1142 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1143 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1144 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());1145 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1146 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1147 1148 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1149 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1150 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1151 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());1152 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1153 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1154}1155 1156} // t201157 1158namespace t211159{1160 1161struct A11162{1163 char _[43981];1164 virtual ~A1() {}1165 1166 A1* getA1() {return this;}1167};1168 1169struct A21170 : private A11171{1172 char _[34981];1173 virtual ~A2() {}1174 1175 A1* getA1() {return this;}1176 A2* getA2() {return this;}1177};1178 1179struct A31180 : public virtual A21181{1182 char _[93481];1183 virtual ~A3() {}1184 1185 A2* getA2() {return this;}1186 A3* getA3() {return this;}1187};1188 1189void test()1190{1191 A1 a1;1192 A2 a2;1193 A3 a3;1194 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1195 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1196 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1197 1198 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1199 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1200 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1201 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1202 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1203 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1204 1205 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1206 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1207 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1208 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1209 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1210 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1211}1212 1213} // t211214 1215namespace t221216{1217 1218struct A11219{1220 char _[43981];1221 virtual ~A1() {}1222 1223 A1* getA1() {return this;}1224};1225 1226struct A21227 : protected virtual A11228{1229 char _[34981];1230 virtual ~A2() {}1231 1232 A1* getA1() {return this;}1233 A2* getA2() {return this;}1234};1235 1236struct A31237 : public virtual A21238{1239 char _[93481];1240 virtual ~A3() {}1241 1242 A2* getA2() {return this;}1243 A3* getA3() {return this;}1244};1245 1246void test()1247{1248 A1 a1;1249 A2 a2;1250 A3 a3;1251 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1252 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1253 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1254 1255 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1256 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1257 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1258 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1259 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1260 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1261 1262 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1263 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1264 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1265 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1266 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1267 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1268}1269 1270} // t221271 1272namespace t231273{1274 1275struct A11276{1277 char _[43981];1278 virtual ~A1() {}1279 1280 A1* getA1() {return this;}1281};1282 1283struct A21284 : private A11285{1286 char _[34981];1287 virtual ~A2() {}1288 1289 A1* getA1() {return this;}1290 A2* getA2() {return this;}1291};1292 1293struct A31294 : private A21295{1296 char _[93481];1297 virtual ~A3() {}1298 1299 t23::A1* getA1() {return A2::getA1();}1300 A2* getA2() {return this;}1301 A3* getA3() {return this;}1302};1303 1304void test()1305{1306 A1 a1;1307 A2 a2;1308 A3 a3;1309 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1310 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1311 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1312 1313 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1314 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1315 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1316 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1317 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1318 1319 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1320 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1321 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1322 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1323 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1324 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1325}1326 1327} // t231328 1329namespace t241330{1331 1332struct A11333{1334 char _[43981];1335 virtual ~A1() {}1336 1337 A1* getA1() {return this;}1338};1339 1340struct A21341 : protected virtual A11342{1343 char _[34981];1344 virtual ~A2() {}1345 1346 A1* getA1() {return this;}1347 A2* getA2() {return this;}1348};1349 1350struct A31351 : private A21352{1353 char _[93481];1354 virtual ~A3() {}1355 1356 t24::A1* getA1() {return A2::getA1();}1357 A2* getA2() {return this;}1358 A3* getA3() {return this;}1359};1360 1361void test()1362{1363 A1 a1;1364 A2 a2;1365 A3 a3;1366 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1367 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1368 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1369 1370 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1371 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1372 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1373 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1374 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1375 1376 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1377 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1378 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1379 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1380 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1381 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1382}1383 1384} // t241385 1386namespace t251387{1388 1389struct A11390{1391 char _[43981];1392 virtual ~A1() {}1393 1394 A1* getA1() {return this;}1395};1396 1397struct A21398 : protected virtual A11399{1400 char _[34981];1401 virtual ~A2() {}1402 1403 A1* getA1() {return this;}1404 A2* getA2() {return this;}1405};1406 1407struct A31408 : private virtual A21409{1410 char _[93481];1411 virtual ~A3() {}1412 1413 t25::A1* getA1() {return A2::getA1();}1414 A2* getA2() {return this;}1415 A3* getA3() {return this;}1416};1417 1418void test()1419{1420 A1 a1;1421 A2 a2;1422 A3 a3;1423 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1424 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1425 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1426 1427 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1428 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1429 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1430 assert(dynamic_cast<A2*>(a3.getA1()) == 0);1431 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1432 1433 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1434 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1435 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1436 assert(dynamic_cast<A3*>(a3.getA1()) == 0);1437 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1438 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1439}1440 1441} // t251442 1443/*1444 1445A1 A11446| |1447A2 |1448 \ |1449 A31450 1451*/1452 1453namespace t261454{1455 1456struct A11457{1458 char _[43981];1459 virtual ~A1() {}1460 1461 A1* getA1() {return this;}1462};1463 1464struct A21465 : public A11466{1467 char _[34981];1468 virtual ~A2() {}1469 1470 A1* getA1() {return this;}1471 A2* getA2() {return this;}1472};1473 1474struct A31475 : public A1,1476 public A21477{1478 char _[93481];1479 virtual ~A3() {}1480 1481 A1* getA12() {return A2::getA1();}1482 A2* getA2() {return this;}1483 A3* getA3() {return this;}1484};1485 1486void test()1487{1488 A1 a1;1489 A2 a2;1490 A3 a3;1491 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1492 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1493 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1494 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1495 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());1496 1497 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1498 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1499 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1500 assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());1501 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1502 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1503 1504 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1505 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1506 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1507 assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());1508 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1509 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1510}1511 1512} // t261513 1514namespace t271515{1516 1517struct A11518{1519 char _[43981];1520 virtual ~A1() {}1521 1522 A1* getA1() {return this;}1523};1524 1525struct A21526 : private A11527{1528 char _[34981];1529 virtual ~A2() {}1530 1531 A1* getA1() {return this;}1532 A2* getA2() {return this;}1533};1534 1535struct A31536 : public A1,1537 public A21538{1539 char _[93481];1540 virtual ~A3() {}1541 1542 A1* getA12() {return A2::getA1();}1543 A2* getA2() {return this;}1544 A3* getA3() {return this;}1545};1546 1547void test()1548{1549 A1 a1;1550 A2 a2;1551 A3 a3;1552 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1553 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1554 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1555 1556 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1557 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1558 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1559 assert(dynamic_cast<A2*>(a3.getA12()) == 0);1560 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1561 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1562 1563 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1564 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1565 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1566 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1567 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1568 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1569}1570 1571} // t271572 1573namespace t281574{1575 1576struct A11577{1578 char _[43981];1579 virtual ~A1() {}1580 1581 A1* getA1() {return this;}1582};1583 1584struct A21585 : public A11586{1587 char _[34981];1588 virtual ~A2() {}1589 1590 A1* getA1() {return this;}1591 A2* getA2() {return this;}1592};1593 1594struct A31595 : private A1,1596 public A21597{1598 char _[93481];1599 virtual ~A3() {}1600 1601 A1* getA12() {return A2::getA1();}1602 A2* getA2() {return this;}1603 A3* getA3() {return this;}1604};1605 1606void test()1607{1608 A1 a1;1609 A2 a2;1610 A3 a3;1611 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1612 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1613 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1614 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());1615 1616 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1617 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1618 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1619 assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());1620 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1621 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1622 1623 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1624 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1625 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1626 assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());1627 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1628 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1629}1630 1631} // t281632 1633namespace t291634{1635 1636struct A11637{1638 char _[43981];1639 virtual ~A1() {}1640 1641 A1* getA1() {return this;}1642};1643 1644struct A21645 : public A11646{1647 char _[34981];1648 virtual ~A2() {}1649 1650 A1* getA1() {return this;}1651 A2* getA2() {return this;}1652};1653 1654struct A31655 : public A1,1656 private A21657{1658 char _[93481];1659 virtual ~A3() {}1660 1661 A1* getA12() {return A2::getA1();}1662 A2* getA2() {return this;}1663 A3* getA3() {return this;}1664};1665 1666void test()1667{1668 A1 a1;1669 A2 a2;1670 A3 a3;1671 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1672 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1673 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1674 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());1675 1676 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1677 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1678 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1679 assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());1680 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1681 1682 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1683 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1684 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1685 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1686 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1687 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1688}1689 1690} // t291691 1692namespace t301693{1694 1695struct A11696{1697 char _[43981];1698 virtual ~A1() {}1699 1700 A1* getA1() {return this;}1701};1702 1703struct A21704 : public A11705{1706 char _[34981];1707 virtual ~A2() {}1708 1709 A1* getA1() {return this;}1710 A2* getA2() {return this;}1711};1712 1713struct A31714 : private A1,1715 private A21716{1717 char _[93481];1718 virtual ~A3() {}1719 1720 A1* getA12() {return A2::getA1();}1721 A2* getA2() {return this;}1722 A3* getA3() {return this;}1723};1724 1725void test()1726{1727 A1 a1;1728 A2 a2;1729 A3 a3;1730 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1731 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1732 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1733 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1734 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());1735 1736 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1737 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1738 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1739 assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());1740 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1741 1742 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1743 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1744 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1745 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1746 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1747 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1748}1749 1750} // t301751 1752namespace t311753{1754 1755struct A11756{1757 char _[43981];1758 virtual ~A1() {}1759 1760 A1* getA1() {return this;}1761};1762 1763struct A21764 : private A11765{1766 char _[34981];1767 virtual ~A2() {}1768 1769 A1* getA1() {return this;}1770 A2* getA2() {return this;}1771};1772 1773struct A31774 : public A1,1775 private A21776{1777 char _[93481];1778 virtual ~A3() {}1779 1780 A1* getA12() {return A2::getA1();}1781 A2* getA2() {return this;}1782 A3* getA3() {return this;}1783};1784 1785void test()1786{1787 A1 a1;1788 A2 a2;1789 A3 a3;1790 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1791 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1792 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1793 1794 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1795 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1796 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1797 assert(dynamic_cast<A2*>(a3.getA12()) == 0);1798 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1799 1800 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1801 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1802 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1803 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1804 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1805 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1806}1807 1808} // t311809 1810namespace t321811{1812 1813struct A11814{1815 char _[43981];1816 virtual ~A1() {}1817 1818 A1* getA1() {return this;}1819};1820 1821struct A21822 : private A11823{1824 char _[34981];1825 virtual ~A2() {}1826 1827 A1* getA1() {return this;}1828 A2* getA2() {return this;}1829};1830 1831struct A31832 : private A1,1833 public A21834{1835 char _[93481];1836 virtual ~A3() {}1837 1838 A1* getA12() {return A2::getA1();}1839 A2* getA2() {return this;}1840 A3* getA3() {return this;}1841};1842 1843void test()1844{1845 A1 a1;1846 A2 a2;1847 A3 a3;1848 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1849 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1850 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1851 1852 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1853 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1854 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1855 assert(dynamic_cast<A2*>(a3.getA12()) == 0);1856 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1857 1858 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1859 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1860 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1861 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1862 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1863 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1864}1865 1866} // t321867 1868namespace t331869{1870 1871struct A11872{1873 char _[43981];1874 virtual ~A1() {}1875 1876 A1* getA1() {return this;}1877};1878 1879struct A21880 : private A11881{1882 char _[34981];1883 virtual ~A2() {}1884 1885 A1* getA1() {return this;}1886 A2* getA2() {return this;}1887};1888 1889struct A31890 : private A1,1891 private A21892{1893 char _[93481];1894 virtual ~A3() {}1895 1896 A1* getA12() {return A2::getA1();}1897 A2* getA2() {return this;}1898 A3* getA3() {return this;}1899};1900 1901void test()1902{1903 A1 a1;1904 A2 a2;1905 A3 a3;1906 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1907 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1908 assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());1909 1910 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1911 assert(dynamic_cast<A2*>(a2.getA1()) == 0);1912 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1913 assert(dynamic_cast<A2*>(a3.getA12()) == 0);1914 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1915 1916 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1917 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1918 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1919 assert(dynamic_cast<A3*>(a3.getA12()) == 0);1920 assert(dynamic_cast<A3*>(a3.getA2()) == 0);1921 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1922}1923 1924} // t331925 1926/*1927 1928A11929| \1930A2 \1931 \ |1932 A31933 1934*/1935 1936namespace t341937{1938 1939struct A11940{1941 char _[43981];1942 virtual ~A1() {}1943 1944 A1* getA1() {return this;}1945};1946 1947struct A21948 : public virtual A11949{1950 char _[34981];1951 virtual ~A2() {}1952 1953 A1* getA1() {return this;}1954 A2* getA2() {return this;}1955};1956 1957struct A31958 : public virtual A1,1959 public A21960{1961 char _[93481];1962 virtual ~A3() {}1963 1964 A1* getA1() {return A1::getA1();}1965 A2* getA2() {return this;}1966 A3* getA3() {return this;}1967};1968 1969void test()1970{1971 A1 a1;1972 A2 a2;1973 A3 a3;1974 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());1975 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());1976 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());1977 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());1978 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());1979 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());1980 1981 assert(dynamic_cast<A2*>(a1.getA1()) == 0);1982 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());1983 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());1984 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());1985 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());1986 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());1987 1988 assert(dynamic_cast<A3*>(a1.getA1()) == 0);1989 assert(dynamic_cast<A3*>(a2.getA1()) == 0);1990 assert(dynamic_cast<A3*>(a2.getA2()) == 0);1991 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());1992 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());1993 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());1994}1995 1996} // t341997 1998namespace t351999{2000 2001struct A12002{2003 char _[43981];2004 virtual ~A1() {}2005 2006 A1* getA1() {return this;}2007};2008 2009struct A22010 : private virtual A12011{2012 char _[34981];2013 virtual ~A2() {}2014 2015 A1* getA1() {return this;}2016 A2* getA2() {return this;}2017};2018 2019struct A32020 : public virtual A1,2021 public A22022{2023 char _[93481];2024 virtual ~A3() {}2025 2026 A1* getA1() {return A1::getA1();}2027 A2* getA2() {return this;}2028 A3* getA3() {return this;}2029};2030 2031void test()2032{2033 A1 a1;2034 A2 a2;2035 A3 a3;2036 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2037 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2038 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2039 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());2040 2041 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2042 assert(dynamic_cast<A2*>(a2.getA1()) == 0);2043 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2044 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());2045 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2046 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());2047 2048 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2049 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2050 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2051 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());2052 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());2053 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2054}2055 2056} // t352057 2058namespace t362059{2060 2061struct A12062{2063 char _[43981];2064 virtual ~A1() {}2065 2066 A1* getA1() {return this;}2067};2068 2069struct A22070 : public virtual A12071{2072 char _[34981];2073 virtual ~A2() {}2074 2075 A1* getA1() {return this;}2076 A2* getA2() {return this;}2077};2078 2079struct A32080 : private virtual A1,2081 public A22082{2083 char _[93481];2084 virtual ~A3() {}2085 2086 A1* getA1() {return A1::getA1();}2087 A2* getA2() {return this;}2088 A3* getA3() {return this;}2089};2090 2091void test()2092{2093 A1 a1;2094 A2 a2;2095 A3 a3;2096 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2097 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2098 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());2099 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2100 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());2101 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());2102 2103 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2104 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());2105 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2106 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());2107 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2108 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());2109 2110 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2111 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2112 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2113 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());2114 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());2115 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2116}2117 2118} // t362119 2120namespace t372121{2122 2123struct A12124{2125 char _[43981];2126 virtual ~A1() {}2127 2128 A1* getA1() {return this;}2129};2130 2131struct A22132 : public virtual A12133{2134 char _[34981];2135 virtual ~A2() {}2136 2137 A1* getA1() {return this;}2138 A2* getA2() {return this;}2139};2140 2141struct A32142 : public virtual A1,2143 private A22144{2145 char _[93481];2146 virtual ~A3() {}2147 2148 A1* getA1() {return A1::getA1();}2149 A2* getA2() {return this;}2150 A3* getA3() {return this;}2151};2152 2153void test()2154{2155 A1 a1;2156 A2 a2;2157 A3 a3;2158 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2159 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2160 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());2161 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2162 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());2163 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());2164 2165 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2166 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());2167 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2168 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());2169 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2170 2171 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2172 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2173 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2174 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());2175 assert(dynamic_cast<A3*>(a3.getA2()) == 0);2176 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2177}2178 2179} // t372180 2181namespace t382182{2183 2184struct A12185{2186 char _[43981];2187 virtual ~A1() {}2188 2189 A1* getA1() {return this;}2190};2191 2192struct A22193 : public virtual A12194{2195 char _[34981];2196 virtual ~A2() {}2197 2198 A1* getA1() {return this;}2199 A2* getA2() {return this;}2200};2201 2202struct A32203 : private virtual A1,2204 private A22205{2206 char _[93481];2207 virtual ~A3() {}2208 2209 A1* getA1() {return A1::getA1();}2210 A2* getA2() {return this;}2211 A3* getA3() {return this;}2212};2213 2214void test()2215{2216 A1 a1;2217 A2 a2;2218 A3 a3;2219 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2220 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2221 assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());2222 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2223 assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());2224 2225 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2226 assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());2227 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2228 assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());2229 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2230 2231 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2232 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2233 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2234 assert(dynamic_cast<A3*>(a3.getA1()) == 0);2235 assert(dynamic_cast<A3*>(a3.getA2()) == 0);2236 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2237}2238 2239} // t382240 2241namespace t392242{2243 2244struct A12245{2246 char _[43981];2247 virtual ~A1() {}2248 2249 A1* getA1() {return this;}2250};2251 2252struct A22253 : private virtual A12254{2255 char _[34981];2256 virtual ~A2() {}2257 2258 A1* getA1() {return this;}2259 A2* getA2() {return this;}2260};2261 2262struct A32263 : public virtual A1,2264 private A22265{2266 char _[93481];2267 virtual ~A3() {}2268 2269 A1* getA1() {return A1::getA1();}2270 A2* getA2() {return this;}2271 A3* getA3() {return this;}2272};2273 2274void test()2275{2276 A1 a1;2277 A2 a2;2278 A3 a3;2279 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2280 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2281 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2282 assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());2283 2284 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2285 assert(dynamic_cast<A2*>(a2.getA1()) == 0);2286 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2287 assert(dynamic_cast<A2*>(a3.getA1()) == 0);2288 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2289 2290 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2291 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2292 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2293 assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());2294 assert(dynamic_cast<A3*>(a3.getA2()) == 0);2295 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2296}2297 2298} // t392299 2300namespace t402301{2302 2303struct A12304{2305 char _[43981];2306 virtual ~A1() {}2307 2308 A1* getA1() {return this;}2309};2310 2311struct A22312 : private virtual A12313{2314 char _[34981];2315 virtual ~A2() {}2316 2317 A1* getA1() {return this;}2318 A2* getA2() {return this;}2319};2320 2321struct A32322 : private virtual A1,2323 public A22324{2325 char _[93481];2326 virtual ~A3() {}2327 2328 A1* getA1() {return A1::getA1();}2329 A2* getA2() {return this;}2330 A3* getA3() {return this;}2331};2332 2333void test()2334{2335 A1 a1;2336 A2 a2;2337 A3 a3;2338 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2339 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2340 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2341 2342 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2343 assert(dynamic_cast<A2*>(a2.getA1()) == 0);2344 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2345 assert(dynamic_cast<A2*>(a3.getA1()) == 0);2346 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2347 assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());2348 2349 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2350 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2351 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2352 assert(dynamic_cast<A3*>(a3.getA1()) == 0);2353 assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());2354 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2355}2356 2357} // t402358 2359namespace t412360{2361 2362struct A12363{2364 char _[43981];2365 virtual ~A1() {}2366 2367 A1* getA1() {return this;}2368};2369 2370struct A22371 : private virtual A12372{2373 char _[34981];2374 virtual ~A2() {}2375 2376 A1* getA1() {return this;}2377 A2* getA2() {return this;}2378};2379 2380struct A32381 : private virtual A1,2382 private A22383{2384 char _[93481];2385 virtual ~A3() {}2386 2387 A1* getA1() {return A1::getA1();}2388 A2* getA2() {return this;}2389 A3* getA3() {return this;}2390};2391 2392void test()2393{2394 A1 a1;2395 A2 a2;2396 A3 a3;2397 assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());2398 assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());2399 assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());2400 2401 assert(dynamic_cast<A2*>(a1.getA1()) == 0);2402 assert(dynamic_cast<A2*>(a2.getA1()) == 0);2403 assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());2404 assert(dynamic_cast<A2*>(a3.getA1()) == 0);2405 assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());2406 2407 assert(dynamic_cast<A3*>(a1.getA1()) == 0);2408 assert(dynamic_cast<A3*>(a2.getA1()) == 0);2409 assert(dynamic_cast<A3*>(a2.getA2()) == 0);2410 assert(dynamic_cast<A3*>(a3.getA1()) == 0);2411 assert(dynamic_cast<A3*>(a3.getA2()) == 0);2412 assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());2413}2414 2415} // t412416 2417int main(int, char**)2418{2419 timer t;2420 t1::test();2421 t2::test();2422 t3::test();2423 t4::test();2424 t5::test();2425 t6::test();2426 t7::test();2427 t8::test();2428 t9::test();2429 t10::test();2430 t11::test();2431 t12::test();2432 t13::test();2433 t14::test();2434 t15::test();2435 t16::test();2436 t17::test();2437 t18::test();2438 t19::test();2439 t20::test();2440 t21::test();2441 t22::test();2442 t23::test();2443 t24::test();2444 t25::test();2445 t26::test();2446 t27::test();2447 t28::test();2448 t29::test();2449 t30::test();2450 t31::test();2451 t32::test();2452 t33::test();2453 t34::test();2454 t35::test();2455 t36::test();2456 t37::test();2457 t38::test();2458 t39::test();2459 t40::test();2460 t41::test();2461 2462 return 0;2463}2464