[llvm-commits] [compiler-rt] r161573 - /compiler-rt/trunk/lib/asan/asan_rtl.cc
Alexander Potapenko
glider at google.com
Thu Aug 9 02:46:12 PDT 2012
Author: glider
Date: Thu Aug 9 04:46:12 2012
New Revision: 161573
URL: http://llvm.org/viewvc/llvm-project?rev=161573&view=rev
Log:
Use a switch instead of a simple condition in force_interface_symbols().
Otherwise Clang eliminates everything after the first interface symbol that is marked noreturn.
Modified:
compiler-rt/trunk/lib/asan/asan_rtl.cc
Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=161573&r1=161572&r2=161573&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Thu Aug 9 04:46:12 2012
@@ -236,23 +236,25 @@
// time.
static NOINLINE void force_interface_symbols() {
volatile int fake_condition = 0; // prevent dead condition elimination.
- if (fake_condition) {
- __asan_report_load1(0);
- __asan_report_load2(0);
- __asan_report_load4(0);
- __asan_report_load8(0);
- __asan_report_load16(0);
- __asan_report_store1(0);
- __asan_report_store2(0);
- __asan_report_store4(0);
- __asan_report_store8(0);
- __asan_report_store16(0);
- __asan_register_global(0, 0, 0);
- __asan_register_globals(0, 0);
- __asan_unregister_globals(0, 0);
- __asan_set_death_callback(0);
- __asan_set_error_report_callback(0);
- __asan_handle_no_return();
+ // __asan_report_* functions are noreturn, so we need a switch to prevent
+ // the compiler from removing any of them.
+ switch (fake_condition) {
+ case 1: __asan_report_load1(0); break;
+ case 2: __asan_report_load2(0); break;
+ case 3: __asan_report_load4(0); break;
+ case 4: __asan_report_load8(0); break;
+ case 5: __asan_report_load16(0); break;
+ case 6: __asan_report_store1(0); break;
+ case 7: __asan_report_store2(0); break;
+ case 8: __asan_report_store4(0); break;
+ case 9: __asan_report_store8(0); break;
+ case 10: __asan_report_store16(0); break;
+ case 11: __asan_register_global(0, 0, 0); break;
+ case 12: __asan_register_globals(0, 0); break;
+ case 13: __asan_unregister_globals(0, 0); break;
+ case 14: __asan_set_death_callback(0); break;
+ case 15: __asan_set_error_report_callback(0); break;
+ case 16: __asan_handle_no_return(); break;
}
}
More information about the llvm-commits
mailing list