|
1 |
| -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -fsyntax-only -verify %s |
2 |
| -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -fsyntax-only -verify=expected-cpp -x c++ %s |
| 1 | +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +sve -Waarch64-sme-attributes -fsyntax-only -verify %s |
| 2 | +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +sve -Waarch64-sme-attributes -fsyntax-only -verify=expected-cpp -x c++ %s |
3 | 3 |
|
4 | 4 | // Valid attributes
|
5 | 5 |
|
@@ -496,3 +496,135 @@ void fmv_caller() {
|
496 | 496 | just_fine();
|
497 | 497 | incompatible_locally_streaming();
|
498 | 498 | }
|
| 499 | + |
| 500 | +void sme_streaming_with_vl_arg(__SVInt8_t a) __arm_streaming { } |
| 501 | + |
| 502 | +__SVInt8_t sme_streaming_returns_vl(void) __arm_streaming { __SVInt8_t r; return r; } |
| 503 | + |
| 504 | +void sme_streaming_compatible_with_vl_arg(__SVInt8_t a) __arm_streaming_compatible { } |
| 505 | + |
| 506 | +__SVInt8_t sme_streaming_compatible_returns_vl(void) __arm_streaming_compatible { __SVInt8_t r; return r; } |
| 507 | + |
| 508 | +void sme_no_streaming_with_vl_arg(__SVInt8_t a) { } |
| 509 | + |
| 510 | +__SVInt8_t sme_no_streaming_returns_vl(void) { __SVInt8_t r; return r; } |
| 511 | + |
| 512 | +// expected-warning@+2 {{passing/returning a VL-dependent argument to/from a __arm_locally_streaming function. The streaming and non-streaming vector lengths may be different}} |
| 513 | +// expected-cpp-warning@+1 {{passing/returning a VL-dependent argument to/from a __arm_locally_streaming function. The streaming and non-streaming vector lengths may be different}} |
| 514 | +__arm_locally_streaming void sme_locally_streaming_with_vl_arg(__SVInt8_t a) { } |
| 515 | + |
| 516 | +// expected-warning@+2 {{passing/returning a VL-dependent argument to/from a __arm_locally_streaming function. The streaming and non-streaming vector lengths may be different}} |
| 517 | +// expected-cpp-warning@+1 {{passing/returning a VL-dependent argument to/from a __arm_locally_streaming function. The streaming and non-streaming vector lengths may be different}} |
| 518 | +__arm_locally_streaming __SVInt8_t sme_locally_streaming_returns_vl(void) { __SVInt8_t r; return r; } |
| 519 | + |
| 520 | +void sme_no_streaming_calling_streaming_with_vl_args() { |
| 521 | + __SVInt8_t a; |
| 522 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 523 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 524 | + sme_streaming_with_vl_arg(a); |
| 525 | +} |
| 526 | + |
| 527 | +void sme_no_streaming_calling_streaming_with_return_vl() { |
| 528 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 529 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 530 | + __SVInt8_t r = sme_streaming_returns_vl(); |
| 531 | +} |
| 532 | + |
| 533 | +void sme_streaming_calling_non_streaming_with_vl_args(void) __arm_streaming { |
| 534 | + __SVInt8_t a; |
| 535 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 536 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 537 | + sme_no_streaming_with_vl_arg(a); |
| 538 | +} |
| 539 | + |
| 540 | +void sme_streaming_calling_non_streaming_with_return_vl(void) __arm_streaming { |
| 541 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 542 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 543 | + __SVInt8_t r = sme_no_streaming_returns_vl(); |
| 544 | +} |
| 545 | + |
| 546 | +void sme_no_streaming_calling_streaming_with_vl_args_param(__SVInt8_t arg, void (*sc)( __SVInt8_t arg) __arm_streaming) { |
| 547 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 548 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 549 | + sc(arg); |
| 550 | +} |
| 551 | + |
| 552 | +__SVInt8_t sme_no_streaming_calling_streaming_return_vl_param(__SVInt8_t (*s)(void) __arm_streaming) { |
| 553 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 554 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 555 | + return s(); |
| 556 | +} |
| 557 | + |
| 558 | +void sme_streaming_compatible_calling_streaming_with_vl_args(__SVInt8_t arg) __arm_streaming_compatible { |
| 559 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 560 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 561 | + sme_streaming_with_vl_arg(arg); |
| 562 | +} |
| 563 | + |
| 564 | +void sme_streaming_compatible_calling_sme_streaming_return_vl(void) __arm_streaming_compatible { |
| 565 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 566 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 567 | + __SVInt8_t r = sme_streaming_returns_vl(); |
| 568 | +} |
| 569 | + |
| 570 | +void sme_streaming_compatible_calling_no_streaming_with_vl_args(__SVInt8_t arg) __arm_streaming_compatible { |
| 571 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 572 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 573 | + sme_no_streaming_with_vl_arg(arg); |
| 574 | +} |
| 575 | + |
| 576 | +void sme_streaming_compatible_calling_no_sme_streaming_return_vl(void) __arm_streaming_compatible { |
| 577 | + // expected-warning@+2 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 578 | + // expected-cpp-warning@+1 {{passing a VL-dependent argument to/from a function that has a different streaming-mode. The streaming and non-streaming vector lengths may be different}} |
| 579 | + __SVInt8_t r = sme_no_streaming_returns_vl(); |
| 580 | +} |
| 581 | + |
| 582 | +void sme_streaming_calling_streaming(__SVInt8_t arg, void (*s)( __SVInt8_t arg) __arm_streaming) __arm_streaming { |
| 583 | + s(arg); |
| 584 | +} |
| 585 | + |
| 586 | +__SVInt8_t sme_streaming_calling_streaming_return_vl(__SVInt8_t (*s)(void) __arm_streaming) __arm_streaming { |
| 587 | + return s(); |
| 588 | +} |
| 589 | + |
| 590 | +void sme_streaming_calling_streaming_with_vl_args(__SVInt8_t a) __arm_streaming { |
| 591 | + sme_streaming_with_vl_arg(a); |
| 592 | +} |
| 593 | + |
| 594 | +void sme_streaming_calling_streaming_with_return_vl(void) __arm_streaming { |
| 595 | + __SVInt8_t r = sme_streaming_returns_vl(); |
| 596 | +} |
| 597 | + |
| 598 | +void sme_streaming_calling_streaming_compatible_with_vl_args(__SVInt8_t a) __arm_streaming { |
| 599 | + sme_streaming_compatible_with_vl_arg(a); |
| 600 | +} |
| 601 | + |
| 602 | +void sme_streaming_calling_streaming_compatible_with_return_vl(void) __arm_streaming { |
| 603 | + __SVInt8_t r = sme_streaming_compatible_returns_vl(); |
| 604 | +} |
| 605 | + |
| 606 | +void sme_no_streaming_calling_streaming_compatible_with_vl_args() { |
| 607 | + __SVInt8_t a; |
| 608 | + sme_streaming_compatible_with_vl_arg(a); |
| 609 | +} |
| 610 | + |
| 611 | +void sme_no_streaming_calling_streaming_compatible_with_return_vl() { |
| 612 | + __SVInt8_t r = sme_streaming_compatible_returns_vl(); |
| 613 | +} |
| 614 | + |
| 615 | +void sme_no_streaming_calling_non_streaming_compatible_with_vl_args() { |
| 616 | + __SVInt8_t a; |
| 617 | + sme_no_streaming_with_vl_arg(a); |
| 618 | +} |
| 619 | + |
| 620 | +void sme_no_streaming_calling_non_streaming_compatible_with_return_vl() { |
| 621 | + __SVInt8_t r = sme_no_streaming_returns_vl(); |
| 622 | +} |
| 623 | + |
| 624 | +void sme_streaming_compatible_calling_streaming_compatible_with_vl_args(__SVInt8_t arg) __arm_streaming_compatible { |
| 625 | + sme_streaming_compatible_with_vl_arg(arg); |
| 626 | +} |
| 627 | + |
| 628 | +void sme_streaming_compatible_calling_streaming_compatible_with_return_vl(void) __arm_streaming_compatible { |
| 629 | + __SVInt8_t r = sme_streaming_compatible_returns_vl(); |
| 630 | +} |
0 commit comments