references.cpp revision d54b6ac2f4f6f0bd0076cbfa885b57277066f06c
1// RUN: clang-cc -verify -emit-llvm -o %t %s 2 3void t1() { 4 extern int& a; 5 int b = a; 6} 7 8void t2(int& a) { 9 int b = a; 10} 11 12int g; 13int& gr = g; 14void t3() { 15 int b = gr; 16} 17 18// Test reference binding. 19 20struct C { int a; }; 21 22void f(const bool&); 23void f(const int&); 24void f(const _Complex int&); 25void f(const C&); 26 27C aggregate_return(); 28 29bool& bool_reference_return(); 30int& int_reference_return(); 31_Complex int& complex_int_reference_return(); 32C& aggregate_reference_return(); 33 34void test_bool() { 35 bool a = true; 36 f(a); 37 38 f(true); 39 40 bool_reference_return() = true; 41 a = bool_reference_return(); 42} 43 44void test_scalar() { 45 int a = 10; 46 f(a); 47 48 struct { int bitfield : 3; } s = { 3 }; 49 f(s.bitfield); 50 51 f(10); 52 53 __attribute((vector_size(16))) typedef int vec4; 54 f((vec4){1,2,3,4}[0]); 55 56 int_reference_return() = 10; 57 a = int_reference_return(); 58} 59 60void test_complex() { 61 _Complex int a = 10i; 62 f(a); 63 64 f(10i); 65 66 complex_int_reference_return() = 10i; 67 a = complex_int_reference_return(); 68} 69 70void test_aggregate() { 71 C c; 72 f(c); 73 74 f(aggregate_return()); 75 aggregate_reference_return().a = 10; 76} 77 78int& reference_return() { 79 return g; 80} 81