blob: 8e1935675766331d1cf151e3db8913283fd442f1 [file] [log] [blame]
Anders Carlssonc8667a82009-05-19 20:40:02 +00001// 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;
Eli Friedman50c39ea2009-05-27 06:04:58 +000014int& grr = gr;
Anders Carlssonc8667a82009-05-19 20:40:02 +000015void t3() {
16 int b = gr;
17}
Anders Carlsson4bbab922009-05-20 00:36:58 +000018
19// Test reference binding.
20
Anders Carlsson68ea78a2009-05-27 01:46:48 +000021struct C { int a; };
Anders Carlsson4bbab922009-05-20 00:36:58 +000022
Anders Carlssone04d1c72009-05-20 01:03:17 +000023void f(const bool&);
Anders Carlsson4bbab922009-05-20 00:36:58 +000024void f(const int&);
25void f(const _Complex int&);
26void f(const C&);
27
Anders Carlsson48265682009-05-27 01:45:47 +000028C aggregate_return();
29
30bool& bool_reference_return();
31int& int_reference_return();
32_Complex int& complex_int_reference_return();
Anders Carlsson68ea78a2009-05-27 01:46:48 +000033C& aggregate_reference_return();
Eli Friedman5df0d422009-05-20 02:31:19 +000034
Anders Carlssone04d1c72009-05-20 01:03:17 +000035void test_bool() {
36 bool a = true;
37 f(a);
38
39 f(true);
Anders Carlsson48265682009-05-27 01:45:47 +000040
41 bool_reference_return() = true;
Anders Carlssone9f2f452009-05-27 03:37:57 +000042 a = bool_reference_return();
Anders Carlssone04d1c72009-05-20 01:03:17 +000043}
44
Anders Carlsson4bbab922009-05-20 00:36:58 +000045void test_scalar() {
46 int a = 10;
Anders Carlsson4bbab922009-05-20 00:36:58 +000047 f(a);
Anders Carlssone04d1c72009-05-20 01:03:17 +000048
Anders Carlsson38d068e2009-05-20 01:24:22 +000049 struct { int bitfield : 3; } s = { 3 };
Anders Carlsson9f75e6b2009-05-20 01:27:39 +000050 f(s.bitfield);
Anders Carlsson38d068e2009-05-20 01:24:22 +000051
Anders Carlssone04d1c72009-05-20 01:03:17 +000052 f(10);
Eli Friedman5df0d422009-05-20 02:31:19 +000053
54 __attribute((vector_size(16))) typedef int vec4;
55 f((vec4){1,2,3,4}[0]);
Anders Carlsson48265682009-05-27 01:45:47 +000056
57 int_reference_return() = 10;
Anders Carlssone9f2f452009-05-27 03:37:57 +000058 a = int_reference_return();
Anders Carlsson4bbab922009-05-20 00:36:58 +000059}
60
61void test_complex() {
62 _Complex int a = 10i;
Anders Carlsson4bbab922009-05-20 00:36:58 +000063 f(a);
Anders Carlsson7cd3a642009-05-20 01:35:03 +000064
65 f(10i);
Anders Carlsson48265682009-05-27 01:45:47 +000066
67 complex_int_reference_return() = 10i;
Anders Carlssone9f2f452009-05-27 03:37:57 +000068 a = complex_int_reference_return();
Anders Carlsson4bbab922009-05-20 00:36:58 +000069}
70
71void test_aggregate() {
72 C c;
Anders Carlsson4bbab922009-05-20 00:36:58 +000073 f(c);
Eli Friedman5df0d422009-05-20 02:31:19 +000074
Anders Carlsson48265682009-05-27 01:45:47 +000075 f(aggregate_return());
Anders Carlsson68ea78a2009-05-27 01:46:48 +000076 aggregate_reference_return().a = 10;
Anders Carlssone70e8f72009-05-27 16:45:02 +000077
78 c = aggregate_reference_return();
Anders Carlsson4bbab922009-05-20 00:36:58 +000079}
80
Eli Friedmand54b6ac2009-05-27 04:56:12 +000081int& reference_return() {
82 return g;
83}
Eli Friedman4a187842009-05-27 05:39:06 +000084
85int reference_decl() {
86 int& a = g;
87 const int& b = 1;
88 return a+b;
89}