conditional-gnu-ext.cpp revision 56ca35d396d8692c384c785f9aeebcf22563fe1e
1af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
2af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian// rdar: // 8353567
3af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian// pr7726
4af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian
5af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanianextern "C" int printf(...);
6af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian
756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallvoid test0() {
856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall// CHECK: call i32 (...)* @printf({{.*}}, i8* inttoptr (i64 3735928559 to i8*))
9af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian    printf("%p\n", (void *)0xdeadbeef ? : (void *)0xaaaaaa);
10af9b96828f9126d993c3e155b8453be62013b735Fariborz Jahanian}
111fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian
121fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian// rdar://8446940
131fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahaniannamespace radar8446940 {
141fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanianextern "C" void abort();
151fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian
161fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanianint main () {
171fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian  char x[1];
181fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian  char *y = x ? : 0;
191fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian
201fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian  if (x != y)
211fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian    abort();
221fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian}
231fb019bf42f5757c027edb56e5bb70233787a39cFariborz Jahanian}
24aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian
25aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahaniannamespace radar8453812 {
26aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanianextern "C" void abort();
27aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian_Complex int getComplex(_Complex int val) {
28aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian  static int count;
29aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian  if (count++)
30aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian    abort();
31aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian  return val;
32aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian}
33aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian
34aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian_Complex int cmplx() {
35aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian    _Complex int cond;
36aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian    _Complex int rhs;
37aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian
38aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian    return getComplex(1+2i) ? : rhs;
39aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian}
40aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian
410b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian// lvalue test
420b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanianvoid foo (int& lv) {
430b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  ++lv;
440b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian}
450b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian
460b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanianint global = 1;
470b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian
480b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanianint &cond() {
490b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  static int count;
500b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  if (count++)
510b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian    abort();
520b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  return global;
530b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian}
540b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian
550b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian
56aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanianint main() {
57aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian  cmplx();
580b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  int rhs = 10;
590b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  foo (cond()? : rhs);
600b78710636671eeb2c5c4dedffa4ad1d58fa4bb8Fariborz Jahanian  return  global-2;
61aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian}
62aa3b57ee9e36a805371e2a543383225cdd2a5d83Fariborz Jahanian}
63