brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 3c35bb1 Raw
80 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s | FileCheck %s2// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -I%S -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s3 4#include <typeinfo>5 6// CHECK: @_ZTIDn = external constant ptr7int* a = nullptr;8 9void f() {10  int* a = nullptr;11}12 13typedef decltype(nullptr) nullptr_t;14 15nullptr_t get_nullptr();16 17struct X { };18void g() {19  // CHECK: call ptr @_Z11get_nullptrv()20  int (X::*pmf)(int) = get_nullptr();21}22 23const std::type_info& f2() {24  return typeid(nullptr_t);25}26 27union U {28  int n;29  nullptr_t b;30};31// CHECK-LABEL: define {{.*}}pr23833_a32// CHECK: store33// CHECK: load34// CHECK-NOT: load35// CHECK: ret i1 false36bool pr23833_a(U &u) { return bool(u.b); }37 38// CHECK-LABEL: define {{.*}}pr23833_b39// CHECK: store40// CHECK: load41// CHECK-NOT: load42// CHECK: ret ptr null43nullptr_t pr23833_b(nullptr_t &n) { return n; }44 45struct X1 { operator int*(); };46struct X2 { operator const nullptr_t&(); };47 48// CHECK-LABEL: define {{.*}}pr23833_c49// CHECK: call {{.*}}X150// CHECK: call {{.*}}X251// CHECK-NOT: load52// CHECK: ret i3253int pr23833_c() {54  return X1() != X2();55}56 57// CHECK-LABEL: define {{.*}}pr23833_d58// CHECK: call {{.*}}X259// CHECK-NOT: load60// CHECK: store61// CHECK: load62// CHECK: ret ptr63int *pr23833_d() {64  int *p = X2();65  return p;66}67 68namespace PR39528 {69  constexpr nullptr_t null = nullptr;70  void f(nullptr_t);71  void g() { f(null); }72}73 74// CHECK-LABEL: define {{.*}}pr13727675// CHECK: {{^}}  store i64 0, ptr %arr, align 8{{$}}76void pr137276(nullptr_t np, int i) {77  long arr[] = { long(np), i, 0 };78  (void)arr;79}80