https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95430
Bug ID: 95430 Summary: [UBSAN] doesn't detect out of bounds in a simple case Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: haoxintu at gmail dot com CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- This case test.cc #include<iostream> int main () { int a[10]; int *p1 = a - 100; // UB int *p2 = a + 100; // UB std::cout << "ok" << std::endl; return 0; } $g++ -fsanitize=undefined test.cc ; ./a.out ok While in Clang $clang++ -fsanitize=undefined test.cc ; ./a.out test.cc:5:17: runtime error: index -100 out of bounds for type 'int [10]' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior test.cc:5:17 in test.cc:6:17: runtime error: index 100 out of bounds for type 'int [10]' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior test.cc:6:17 in ok My GCC version is $g++ --version g++ (GCC) 11.0.0 20200526 (experimental) Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. GCC doesn't trigger warning or runtime error in out of bounds in an array.