// Test the -cc1 flag. There's no -fno-... option in -cc1 invocations, // just the positive option. // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -verify=OFF %s // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -verify=ON %s \ // RUN: -fsafe-buffer-usage-suggestions // Test driver flags. Now there's both -f... and -fno-... to worry about. // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -Xclang -verify=OFF %s // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -fsafe-buffer-usage-suggestions \ // RUN: -Xclang -verify=ON %s // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -fno-safe-buffer-usage-suggestions \ // RUN: -Xclang -verify=OFF %s // In case of driver flags, last flag takes precedence. // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -fsafe-buffer-usage-suggestions \ // RUN: -fno-safe-buffer-usage-suggestions \ // RUN: -Xclang -verify=OFF %s // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -fno-safe-buffer-usage-suggestions \ // RUN: -fsafe-buffer-usage-suggestions \ // RUN: -Xclang -verify=ON %s // Passing through -Xclang. // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -Xclang -fsafe-buffer-usage-suggestions \ // RUN: -Xclang -verify=ON %s // -Xclang flags take precedence over driver flags. // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -Xclang -fsafe-buffer-usage-suggestions \ // RUN: -fno-safe-buffer-usage-suggestions \ // RUN: -Xclang -verify=ON %s // RUN: %clang -fsyntax-only -std=c++20 -Wunsafe-buffer-usage \ // RUN: -fno-safe-buffer-usage-suggestions \ // RUN: -Xclang -fsafe-buffer-usage-suggestions \ // RUN: -Xclang -verify=ON %s [[clang::unsafe_buffer_usage]] void bar(int *); void foo(int *x) { // \ // ON-warning{{'x' is an unsafe pointer used for buffer access}} // FIXME: Better "OFF" warning? x[5] = 10; // \ // ON-note {{used in buffer access here}} \ // OFF-warning{{unsafe buffer access}} \ // OFF-note {{pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions}} x += 5; // \ // ON-note {{used in pointer arithmetic here}} \ // OFF-warning{{unsafe pointer arithmetic}} \ // OFF-note {{pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions}} bar(x); // \ // ON-warning{{function introduces unsafe buffer manipulation}} \ // OFF-warning{{function introduces unsafe buffer manipulation}} \ // OFF-note {{pass -fsafe-buffer-usage-suggestions to receive code hardening suggestions}} }