[cfe-commits] r108296 - /cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp

Douglas Gregor dgregor at apple.com
Tue Jul 13 16:27:15 PDT 2010


Author: dgregor
Date: Tue Jul 13 18:27:15 2010
New Revision: 108296

URL: http://llvm.org/viewvc/llvm-project?rev=108296&view=rev
Log:
Add missing testcases for lvalue bitcasts

Added:
    cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp   (with props)

Added: cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp?rev=108296&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp Tue Jul 13 18:27:15 2010
@@ -0,0 +1,114 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s
+
+struct X { int i; float f; };
+struct Y { X x; };
+
+// CHECK: define void @_Z21reinterpret_cast_testRiRfR1X
+void reinterpret_cast_test(int &ir, float &fr, X &xr) {
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: load i32*
+  ir = reinterpret_cast<int&>(fr);
+  // CHECK: load
+  // CHECK: {{bitcast.*to i32\*}}
+  // CHECK: load i32*
+  ir = reinterpret_cast<int&>(xr);
+  // CHECK: load i32
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = reinterpret_cast<float&>(ir);
+  // CHECK: load
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = reinterpret_cast<float&>(xr);
+  // CHECK: load i32**
+  // CHECK: bitcast i32*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = reinterpret_cast<X&>(ir);
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = reinterpret_cast<X&>(fr);
+  // CHECK: ret void
+}
+
+// CHECK: define void @_Z6c_castRiRfR1X
+void c_cast(int &ir, float &fr, X &xr) {
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: load i32*
+  ir = (int&)fr;
+  // CHECK: load
+  // CHECK: {{bitcast.*to i32\*}}
+  // CHECK: load i32*
+  ir = (int&)xr;
+  // CHECK: load i32
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = (float&)ir;
+  // CHECK: load
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = (float&)xr;
+  // CHECK: load i32**
+  // CHECK: bitcast i32*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = (X&)ir;
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = (X&)fr;
+  // CHECK: ret void
+}
+
+// CHECK: define void @_Z15functional_castRiRfR1X
+void functional_cast(int &ir, float &fr, X &xr) {
+  typedef int &intref;
+  typedef float &floatref;
+  typedef X &Xref;
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: load i32*
+  ir = intref(fr);
+  // CHECK: load
+  // CHECK: {{bitcast.*to i32\*}}
+  // CHECK: load i32*
+  ir = intref(xr);
+  // CHECK: load i32
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = floatref(ir);
+  // CHECK: load
+  // CHECK: {{bitcast.*to float\*}}
+  // CHECK: load float*
+  fr = floatref(xr);
+  // CHECK: load i32**
+  // CHECK: bitcast i32*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = Xref(ir);
+  // CHECK: load float**
+  // CHECK: bitcast float*
+  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  xr = Xref(fr);
+  // CHECK: ret void
+}
+
+namespace PR6437 {
+  struct in_addr {};
+  void copy( const struct in_addr &new_addr ) {
+    int addr = (int&)new_addr;
+  }
+}
+
+namespace PR7593 {
+  void foo(double &X, char *A) {
+    X = reinterpret_cast<double&>(A[4]);
+  }
+}
+
+namespace PR7344 {
+  void serialize_annotatable_id( void*& id )
+  {
+    unsigned long l_id = (unsigned long&)id;
+  }
+}

Propchange: cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cfe/trunk/test/CodeGenCXX/lvalue-bitcasts.cpp
------------------------------------------------------------------------------
    svn:mime-type = text/plain





More information about the cfe-commits mailing list