| // RUN: %clang_cc1 -std=c++1z -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s -w | FileCheck %s | |
| typedef int T; | |
| void f() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: store i32 5, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[B:.*]] = load i32, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[C:.*]] = icmp slt i32 %[[B]], 8 | |
| if (int a = 5; a < 8) | |
| ; | |
| } | |
| void f1() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[B:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[C:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: store i32 5, ptr %[[B]], align 4 | |
| // CHECK-NEXT: store i32 7, ptr %[[C]], align 4 | |
| if (int a, b = 5; int c = 7) | |
| ; | |
| } | |
| int f2() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[B:.*]] = call noundef i32 @_Z2f2v() | |
| // CHECK-NEXT: store i32 7, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[C:.*]] = load i32, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[D:.*]] = icmp ne i32 %[[C]], 0 | |
| if (T{f2()}; int c = 7) | |
| ; | |
| return 2; | |
| } | |
| void g() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: store i32 5, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[B:.*]] = load i32, ptr %[[A]], align 4 | |
| // CHECK-NEXT: switch i32 %[[B]], label %[[C:.*]] [ | |
| switch (int a = 5; a) { | |
| case 0: | |
| break; | |
| } | |
| } | |
| void g1() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[B:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[C:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: store i32 5, ptr %[[B]], align 4 | |
| // CHECK-NEXT: store i32 7, ptr %[[C]], align 4 | |
| // CHECK-NEXT: %[[D:.*]] = load i32, ptr %[[C]], align 4 | |
| // CHECK-NEXT: switch i32 %[[D]], label %[[E:.*]] [ | |
| switch (int a, b = 5; int c = 7) { | |
| case 0: | |
| break; | |
| } | |
| } | |
| int g2() { | |
| // CHECK: %[[A:.*]] = alloca i32, align 4 | |
| // CHECK-NEXT: %[[B:.*]] = call noundef i32 @_Z2f2v() | |
| // CHECK-NEXT: store i32 7, ptr %[[A]], align 4 | |
| // CHECK-NEXT: %[[C:.*]] = load i32, ptr %[[A]], align 4 | |
| // CHECK-NEXT: switch i32 %[[C]], label %[[E:.*]] [ | |
| switch (T{f2()}; int c = 7) { | |
| case 0: | |
| break; | |
| } | |
| return 2; | |
| } |