annotate clang/test/Sema/attr-musttail.m @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-objc-root-class -verify %s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 void TestObjcBlock(void) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 void (^x)(void) = ^(void) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 __attribute__((musttail)) return TestObjcBlock(); // expected-error{{'musttail' attribute cannot be used from a block}}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 __attribute__((musttail)) return x();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 void ReturnsVoid(void);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 void TestObjcBlockVar(void) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 __block int i = 0; // expected-note{{jump exits scope of __block variable}}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 __attribute__((musttail)) return ReturnsVoid(); // expected-error{{cannot perform a tail call from this return statement}}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 __attribute__((objc_root_class))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 @interface TestObjcClass
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 @end
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 @implementation TestObjcClass
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 - (void)testObjCMethod {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 __attribute__((musttail)) return ReturnsVoid(); // expected-error{{'musttail' attribute cannot be used from an Objective-C function}}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 @end