Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaCXX / blocks-1.cpp
blobe11fd92cf2368ecdac3ada8c7c2ba04082f4a6ac
1 // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks -std=c++1y
3 extern "C" int exit(int);
5 typedef struct {
6 unsigned long ps[30];
7 int qs[30];
8 } BobTheStruct;
10 int main (int argc, const char * argv[]) {
11 BobTheStruct inny;
12 BobTheStruct outty;
13 BobTheStruct (^copyStruct)(BobTheStruct);
14 int i;
16 for(i=0; i<30; i++) {
17 inny.ps[i] = i * i * i;
18 inny.qs[i] = -i * i * i;
21 copyStruct = ^(BobTheStruct aBigStruct){ return aBigStruct; }; // pass-by-value intrinsically copies the argument
23 outty = copyStruct(inny);
25 if ( &inny == &outty ) {
26 exit(1);
28 for(i=0; i<30; i++) {
29 if ( (inny.ps[i] != outty.ps[i]) || (inny.qs[i] != outty.qs[i]) ) {
30 exit(1);
34 return 0;
37 namespace rdar8134521 {
38 void foo() {
39 int (^P)(int) = reinterpret_cast<int(^)(int)>(1);
40 P = (int(^)(int))(1);
42 P = reinterpret_cast<int(^)(int)>((void*)1);
43 P = (int(^)(int))((void*)1);
47 namespace rdar11055105 {
48 struct A {
49 void foo();
52 template <class T> void foo(T &x) noexcept(noexcept(x.foo()));
54 void (^block)() = ^{
55 A a;
56 foo(a);
60 namespace LocalDecls {
61 void f() {
62 (void) ^{
63 extern int a; // expected-note {{previous}}
64 extern int b(); // expected-note {{previous}}
67 void g() {
68 (void) ^{
69 extern float a; // expected-error {{different type}}
70 extern float b(); // expected-error {{cannot be overloaded}}