annotate gcc/testsuite/g++.dg/ipa/pr81248.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // { dg-do compile { target c++17 } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-options "-O2 -fdump-tree-eipa_sra" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 #include <type_traits>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef unsigned char __uint8_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 typedef __uint8_t uint8_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 struct A {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 A() = default;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 A(const A& o) = default;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 A(const volatile A& o) : m1(o.m1) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 uint8_t m1{0};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 volatile uint8_t v;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 template<typename T>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 void f(const T& x) __attribute__((noinline));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 template<typename T>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 void f(const T& x) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 if constexpr(std::is_same<std::remove_cv_t<T>, A>::value) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 v = x.m1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 else {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 v = x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 uint8_t n1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 A n2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 int main() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 f(n1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 f(n2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 // { dg-final { scan-tree-dump-times "Adjusting call" 2 "eipa_sra" } }