xref: /llvm-project/clang/test/CodeGenCXX/casts.cpp (revision 19fc0b753a212bd4c20b779b6444d759beabeeb0)
18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 %s -emit-llvm -o %t
2027732b5SAnders Carlsson 
3027732b5SAnders Carlsson // PR5248
4027732b5SAnders Carlsson namespace PR5248 {
5027732b5SAnders Carlsson struct A {
6027732b5SAnders Carlsson   void copyFrom(const A &src);
7027732b5SAnders Carlsson   void addRef(void);
8*19fc0b75SDouglas Gregor 
9*19fc0b75SDouglas Gregor   A& operator=(int);
10027732b5SAnders Carlsson };
11027732b5SAnders Carlsson 
copyFrom(const A & src)12027732b5SAnders Carlsson void A::copyFrom(const A &src) {
13027732b5SAnders Carlsson   ((A &)src).addRef();
14027732b5SAnders Carlsson }
15027732b5SAnders Carlsson }
16027732b5SAnders Carlsson 
17*19fc0b75SDouglas Gregor // reinterpret_cast to self
test(PR5248::A * a)18*19fc0b75SDouglas Gregor void test(PR5248::A* a) {
19*19fc0b75SDouglas Gregor   reinterpret_cast<PR5248::A&>(*a) = 17;
20*19fc0b75SDouglas Gregor }
21