| // RUN: %clang_cc1 -std=c++98 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++11 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++14 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++17 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++20 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| // RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK |
| |
| namespace cwg519 { // cwg519: 2.7 |
| void f() { |
| int *a = 0; |
| void *v = a; |
| bool c1 = v == static_cast<void *>(0); |
| |
| void *w = 0; |
| int *b = static_cast<int*>(w); |
| bool c2 = b == static_cast<int *>(0); |
| } |
| } // namespace cwg519 |
| |
| // We're checking that `null`s that were initially stored in `a` and `w` |
| // are simply copied over all the way to respective comparisons with `null`. |
| |
| // CHECK-LABEL: define {{.*}} void @cwg519::f()() |
| // CHECK: store ptr null, ptr [[A:%.+]], |
| // CHECK-NEXT: [[TEMP_A:%.+]] = load ptr, ptr [[A]] |
| // CHECK-NEXT: store ptr [[TEMP_A]], ptr [[V:%.+]], |
| // CHECK-NEXT: [[TEMP_V:%.+]] = load ptr, ptr [[V]] |
| // CHECK-NEXT: {{.+}} = icmp eq ptr [[TEMP_V]], null |
| |
| // CHECK: store ptr null, ptr [[W:%.+]], |
| // CHECK-NEXT: [[TEMP_W:%.+]] = load ptr, ptr [[W]] |
| // CHECK-NEXT: store ptr [[TEMP_W]], ptr [[B:%.+]], |
| // CHECK-NEXT: [[TEMP_B:%.+]] = load ptr, ptr [[B]] |
| // CHECK-NEXT: {{.+}} = icmp eq ptr [[TEMP_B]], null |
| // CHECK-LABEL: } |