llvm-project

Форк
0
/
instrprof-discarded-comdat.cpp 
51 строка · 1.3 Кб
1
// Check that instrprof does not introduce references to discarded sections when
2
// using comdats.
3
//
4
// Occasionally, it is possible that the same function can be compiled in
5
// different TUs with slightly different linkages, e.g., due to different
6
// compiler options. However, if these are comdat functions, a single
7
// implementation will be chosen at link time. we want to ensure that the
8
// profiling data does not contain a reference to the discarded section.
9

10
// UNSUPPORTED: target={{.*windows.*}}
11

12
// RUN: mkdir -p %t.d
13
// RUN: %clangxx_pgogen -O2 -fPIC -ffunction-sections -fdata-sections -c %s -o %t.d/a1.o -DOBJECT_1 -mllvm -disable-preinline
14
// RUN: %clangxx_pgogen -O2 -fPIC -ffunction-sections -fdata-sections -c %s -o %t.d/a2.o
15
// RUN: %clangxx_pgogen -fPIC -shared -o %t.d/liba.so %t.d/a1.o %t.d/a2.o 2>&1 | FileCheck %s --allow-empty
16

17
// Ensure that we don't get an error when linking
18
// CHECK-NOT: relocation refers to a discarded section: .text._ZN1CIiE1fEi
19

20
template <typename T> struct C {
21
  void f(T x);
22
  int g(T x) {
23
    f(x);
24
    return v;
25
  }
26
  int v;
27
};
28

29
template <typename T>
30
#ifdef OBJECT_1
31
__attribute__((weak))
32
#else
33
__attribute__((noinline))
34
#endif
35
void C<T>::f(T x) {
36
  v += x;
37
}
38

39
#ifdef OBJECT_1
40
int foo() {
41
  C<int> c;
42
  c.f(1);
43
  return c.g(2);
44
}
45
#else
46
int bar() {
47
  C<int> c;
48
  c.f(3);
49
  return c.g(4);
50
}
51
#endif
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.