p10-0x.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
  2. volatile int g1;
  3. struct S {
  4. volatile int a;
  5. } g2;
  6. volatile int& refcall();
  7. // CHECK: define void @_Z2f1PViPV1S
  8. void f1(volatile int *x, volatile S* s) {
  9. // We should perform the load in these cases.
  10. // CHECK: load volatile i32, i32*
  11. (*x);
  12. // CHECK: load volatile i32, i32*
  13. __extension__ g1;
  14. // CHECK: load volatile i32, i32*
  15. s->a;
  16. // CHECK: load volatile i32, i32*
  17. g2.a;
  18. // CHECK: load volatile i32, i32*
  19. s->*(&S::a);
  20. // CHECK: load volatile i32, i32*
  21. // CHECK: load volatile i32, i32*
  22. x[0], 1 ? x[0] : *x;
  23. // CHECK: load volatile i32, i32*
  24. // CHECK: load volatile i32, i32*
  25. // CHECK: load volatile i32, i32*
  26. *x ?: *x;
  27. // CHECK: load volatile i32, i32*
  28. ({ *x; });
  29. // CHECK-NOT: load volatile
  30. // CHECK: ret
  31. }
  32. // CHECK: define void @_Z2f2PVi
  33. // CHECK-NOT: load volatile
  34. // CHECK: ret
  35. void f2(volatile int *x) {
  36. // We shouldn't perform the load in these cases.
  37. refcall();
  38. 1 ? refcall() : *x;
  39. }