1c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
28da1cb633967a8b0b235854508638f42197d4acbChris Lattner
31eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpfloat test1(int cond, float a, float b) {
48da1cb633967a8b0b235854508638f42197d4acbChris Lattner  return cond ? a : b;
58da1cb633967a8b0b235854508638f42197d4acbChris Lattner}
61eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
71eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpdouble test2(int cond, float a, double b) {
88da1cb633967a8b0b235854508638f42197d4acbChris Lattner  return cond ? a : b;
98da1cb633967a8b0b235854508638f42197d4acbChris Lattner}
102202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattner
112202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattnervoid f();
122202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattner
132202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattnervoid test3(){
142202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattner   1 ? f() : (void)0;
152202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattner}
162202bce80fc72d067cbe67dc1512f7b45351fd31Chris Lattner
17b1284ace14b7eb3cc206a3285e743861ab1a4773Eli Friedmanvoid test4() {
181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  int i; short j;
191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  float* k = 1 ? &i : &j;
20b1284ace14b7eb3cc206a3285e743861ab1a4773Eli Friedman}
2168f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedman
2268f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedmanvoid test5() {
2368f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedman  const int* cip;
2468f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedman  void* vp;
2568f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedman  cip = 0 ? vp : cip;
2668f624e9eb2d80b2e5c1a51471a76782cb1bc70bEli Friedman}
27145c08360a8ef90392bb0482c94f47e632e78f8cEli Friedman
28145c08360a8ef90392bb0482c94f47e632e78f8cEli Friedmanvoid test6();
29145c08360a8ef90392bb0482c94f47e632e78f8cEli Friedmanvoid test7(int);
30145c08360a8ef90392bb0482c94f47e632e78f8cEli Friedmanvoid* test8() {return 1 ? test6 : test7;}
31145c08360a8ef90392bb0482c94f47e632e78f8cEli Friedman
32108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopes
33108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopesvoid _efree(void *ptr);
34108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopes
351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid _php_stream_free3() {
361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  (1 ? free(0) : _efree(0));
37108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopes}
38108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopes
391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid _php_stream_free4() {
401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  1 ? _efree(0) : free(0);
41108f55d6fd9a1c0e753eb8e046cb1f1b81d77a76Nuno Lopes}
4216fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedman
4316fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedman// PR5526
4416fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedmanstruct test9 { int a; };
4516fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedmanvoid* test9spare();
4616fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedmanvoid test9(struct test9 *p) {
4716fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedman  p ? p : test9spare();
4816fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedman}
4916fea9b2e5888443a6e2f96b397c92d3f6710ee8Eli Friedman
50c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: @test10
51c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: select i1 {{.*}}, i32 4, i32 5
52c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattnerint test10(int c) {
53c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner  return c ? 4 : 5;
54c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner}
55c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattnerenum { Gronk = 5 };
56c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner
57c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// rdar://9289603
58c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: @test11
59c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: select i1 {{.*}}, i32 4, i32 5
60c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattnerint test11(int c) {
61c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner  return c ? 4 : Gronk;
62c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner}
63c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner
64c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: @test12
65c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner// CHECK: select i1 {{.*}}, double 4.0{{.*}}, double 2.0
66c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattnerdouble test12(int c) {
67c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner  return c ? 4.0 : 2.0;
68c6bea67efc38b075c401ebdb6ae97afa08cbb51dChris Lattner}
691e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedman// CHECK: @test13
701e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedman// CHECK: call {{.*}} @f2(
711e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedmanint f2(void);
721e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedmanvoid test13() {
731e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedman  f2() ? (void)0 : (void)0;
741e4f68ce0bffd9a6b9a8fc56d1766177382788e3Eli Friedman}
75