[compiler-rt][crt] make test case nontrivial in check_cxx_section_exists
Summary:
.init_array gets optimized away when building with -O2 and as a result,
check_cxx_section_exists failed to pass -DCOMPILER_RT_HAS_INITFINI_ARRAY
when building crtbegin.o and crtend.o, which causes binaries linked with
them encounter segmentation fault. See https://crbug.com/855759 for
details. This change prevents .init_array section to be optimized away
even with -O2 or higher optimization level.
Subscribers: dberris, mgorny, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D67628
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@372038 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/crt/CMakeLists.txt b/lib/crt/CMakeLists.txt
index 34c368f..90e94b9 100644
--- a/lib/crt/CMakeLists.txt
+++ b/lib/crt/CMakeLists.txt
@@ -70,7 +70,7 @@
endfunction()
check_cxx_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY
- SOURCE "__attribute__((constructor)) void f() {}\nint main() { return 0; }\n")
+ SOURCE "volatile int x;\n__attribute__((constructor)) void f() {x = 0;}\nint main() { return 0; }\n")
append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS)
append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS)