2009-05-19 20:40:02 +00:00
|
|
|
// RUN: clang-cc -verify -emit-llvm -o %t %s
|
|
|
|
|
|
|
|
void t1() {
|
|
|
|
extern int& a;
|
|
|
|
int b = a;
|
|
|
|
}
|
|
|
|
|
|
|
|
void t2(int& a) {
|
|
|
|
int b = a;
|
|
|
|
}
|
|
|
|
|
|
|
|
int g;
|
|
|
|
int& gr = g;
|
2009-05-27 06:04:58 +00:00
|
|
|
int& grr = gr;
|
2009-05-19 20:40:02 +00:00
|
|
|
void t3() {
|
|
|
|
int b = gr;
|
|
|
|
}
|
2009-05-20 00:36:58 +00:00
|
|
|
|
|
|
|
// Test reference binding.
|
|
|
|
|
2009-05-27 01:46:48 +00:00
|
|
|
struct C { int a; };
|
2009-05-20 00:36:58 +00:00
|
|
|
|
2009-05-20 01:03:17 +00:00
|
|
|
void f(const bool&);
|
2009-05-20 00:36:58 +00:00
|
|
|
void f(const int&);
|
|
|
|
void f(const _Complex int&);
|
|
|
|
void f(const C&);
|
|
|
|
|
2009-05-27 01:45:47 +00:00
|
|
|
C aggregate_return();
|
|
|
|
|
|
|
|
bool& bool_reference_return();
|
|
|
|
int& int_reference_return();
|
|
|
|
_Complex int& complex_int_reference_return();
|
2009-05-27 01:46:48 +00:00
|
|
|
C& aggregate_reference_return();
|
2009-05-20 02:31:19 +00:00
|
|
|
|
2009-05-20 01:03:17 +00:00
|
|
|
void test_bool() {
|
|
|
|
bool a = true;
|
|
|
|
f(a);
|
|
|
|
|
|
|
|
f(true);
|
2009-05-27 01:45:47 +00:00
|
|
|
|
|
|
|
bool_reference_return() = true;
|
2009-05-27 03:37:57 +00:00
|
|
|
a = bool_reference_return();
|
2009-05-20 01:03:17 +00:00
|
|
|
}
|
|
|
|
|
2009-05-20 00:36:58 +00:00
|
|
|
void test_scalar() {
|
|
|
|
int a = 10;
|
|
|
|
f(a);
|
2009-05-20 01:03:17 +00:00
|
|
|
|
2009-05-20 01:24:22 +00:00
|
|
|
struct { int bitfield : 3; } s = { 3 };
|
2009-05-20 01:27:39 +00:00
|
|
|
f(s.bitfield);
|
2009-05-20 01:24:22 +00:00
|
|
|
|
2009-05-20 01:03:17 +00:00
|
|
|
f(10);
|
2009-05-20 02:31:19 +00:00
|
|
|
|
|
|
|
__attribute((vector_size(16))) typedef int vec4;
|
|
|
|
f((vec4){1,2,3,4}[0]);
|
2009-05-27 01:45:47 +00:00
|
|
|
|
|
|
|
int_reference_return() = 10;
|
2009-05-27 03:37:57 +00:00
|
|
|
a = int_reference_return();
|
2009-05-20 00:36:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void test_complex() {
|
|
|
|
_Complex int a = 10i;
|
|
|
|
f(a);
|
2009-05-20 01:35:03 +00:00
|
|
|
|
|
|
|
f(10i);
|
2009-05-27 01:45:47 +00:00
|
|
|
|
|
|
|
complex_int_reference_return() = 10i;
|
2009-05-27 03:37:57 +00:00
|
|
|
a = complex_int_reference_return();
|
2009-05-20 00:36:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void test_aggregate() {
|
|
|
|
C c;
|
|
|
|
f(c);
|
2009-05-20 02:31:19 +00:00
|
|
|
|
2009-05-27 01:45:47 +00:00
|
|
|
f(aggregate_return());
|
2009-05-27 01:46:48 +00:00
|
|
|
aggregate_reference_return().a = 10;
|
2009-05-27 16:45:02 +00:00
|
|
|
|
|
|
|
c = aggregate_reference_return();
|
2009-05-20 00:36:58 +00:00
|
|
|
}
|
|
|
|
|
2009-05-27 04:56:12 +00:00
|
|
|
int& reference_return() {
|
|
|
|
return g;
|
|
|
|
}
|
2009-05-27 05:39:06 +00:00
|
|
|
|
|
|
|
int reference_decl() {
|
|
|
|
int& a = g;
|
|
|
|
const int& b = 1;
|
|
|
|
return a+b;
|
|
|
|
}
|
2009-09-01 21:18:52 +00:00
|
|
|
|
|
|
|
struct A {
|
|
|
|
int& b();
|
|
|
|
};
|
|
|
|
|
|
|
|
void f(A* a) {
|
|
|
|
int b = a->b();
|
|
|
|
}
|
2009-10-03 16:30:22 +00:00
|
|
|
|
|
|
|
// PR5122
|
|
|
|
void *foo = 0;
|
|
|
|
void * const & kFoo = foo;
|
|
|
|
|