2012-05-25 06:04:19 +08:00
|
|
|
// RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
|
|
|
|
|
|
|
|
volatile int g1;
|
|
|
|
struct S {
|
|
|
|
volatile int a;
|
|
|
|
} g2;
|
|
|
|
|
|
|
|
volatile int& refcall();
|
|
|
|
|
[CodeGenModule] Assume dso_local for -fpic -fno-semantic-interposition
Summary:
Clang -fpic defaults to -fno-semantic-interposition (GCC -fpic defaults
to -fsemantic-interposition).
Users need to specify -fsemantic-interposition to get semantic
interposition behavior.
Semantic interposition is currently a best-effort feature. There may
still be some cases where it is not handled well.
Reviewers: peter.smith, rnk, serge-sans-paille, sfertile, jfb, jdoerfert
Subscribers: dschuff, jyknight, dylanmckay, nemanjai, jvesely, kbarton, fedor.sergeev, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, jrtc27, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, arphaman, PkmX, jocewei, jsji, Jim, lenary, s.egerton, pzheng, sameer.abuasal, apazos, luismarques, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73865
2020-02-03 04:23:47 +08:00
|
|
|
// CHECK: define dso_local void @_Z2f1PViPV1S
|
2012-05-25 06:04:19 +08:00
|
|
|
void f1(volatile int *x, volatile S* s) {
|
|
|
|
// We should perform the load in these cases.
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
(*x);
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
__extension__ g1;
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
s->a;
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
g2.a;
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
s->*(&S::a);
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
x[0], 1 ? x[0] : *x;
|
|
|
|
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
|
|
|
// CHECK: load volatile i32, i32*
|
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
*x ?: *x;
|
|
|
|
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: load volatile i32, i32*
|
2012-05-25 06:04:19 +08:00
|
|
|
({ *x; });
|
|
|
|
|
|
|
|
// CHECK-NOT: load volatile
|
|
|
|
// CHECK: ret
|
|
|
|
}
|
|
|
|
|
[CodeGenModule] Assume dso_local for -fpic -fno-semantic-interposition
Summary:
Clang -fpic defaults to -fno-semantic-interposition (GCC -fpic defaults
to -fsemantic-interposition).
Users need to specify -fsemantic-interposition to get semantic
interposition behavior.
Semantic interposition is currently a best-effort feature. There may
still be some cases where it is not handled well.
Reviewers: peter.smith, rnk, serge-sans-paille, sfertile, jfb, jdoerfert
Subscribers: dschuff, jyknight, dylanmckay, nemanjai, jvesely, kbarton, fedor.sergeev, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, jrtc27, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, arphaman, PkmX, jocewei, jsji, Jim, lenary, s.egerton, pzheng, sameer.abuasal, apazos, luismarques, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73865
2020-02-03 04:23:47 +08:00
|
|
|
// CHECK: define dso_local void @_Z2f2PVi
|
2012-05-25 06:04:19 +08:00
|
|
|
// CHECK-NOT: load volatile
|
|
|
|
// CHECK: ret
|
|
|
|
void f2(volatile int *x) {
|
|
|
|
// We shouldn't perform the load in these cases.
|
|
|
|
refcall();
|
|
|
|
1 ? refcall() : *x;
|
|
|
|
}
|