1 // RUN: rm -rf %t 2 // RUN: mkdir -p %t 3 // RUN: split-file %s %t 4 // 5 // RUN: %clang_cc1 -Wno-unused-value -std=c++20 -emit-pch -o %t/header.pch %t/header.h -x c++ 6 // RUN: %clang_cc1 -Wno-unused-value -Wunsafe-buffer-usage -std=c++20 -include-pch %t/header.pch -verify %t/main.cpp 7 8 //--- header.h foo(int * p)9int foo(int *p) { 10 return p[5]; // This will be warned 11 } 12 13 #pragma clang unsafe_buffer_usage begin 14 #include "header-2.h" 15 #pragma clang unsafe_buffer_usage end 16 17 //--- header-2.h 18 // Included by the PCH in the traditional way. The include directive 19 // in the PCH is enclosed in an opt-out region, so unsafe operations 20 // here is suppressed. 21 bar(int * p)22int bar(int *p) { 23 return p[5]; 24 } 25 26 27 //--- main.cpp 28 // expected-warning@header.h:2 {{unsafe buffer access}} 29 // expected-note@header.h:2 {{pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions}} 30