189a1d03eSRichard 
289a1d03eSRichard // Copy the 'mylib.h' to a directory under the build directory. This is
389a1d03eSRichard // required, since the relative order of the emitted diagnostics depends on the
489a1d03eSRichard // absolute file paths which is sorted by clang-tidy prior emitting.
589a1d03eSRichard //
689a1d03eSRichard // RUN: mkdir -p %t/sys && mkdir -p %t/usr \
789a1d03eSRichard // RUN:   && cp %S/Inputs/deprecated-headers/mysystemlib.h %t/sys/mysystemlib.h \
889a1d03eSRichard // RUN:   && cp %S/Inputs/deprecated-headers/mylib.h       %t/usr/mylib.h
989a1d03eSRichard 
1089a1d03eSRichard // RUN: %check_clang_tidy -std=c++11 %s modernize-deprecated-headers %t \
1189a1d03eSRichard // RUN:   -check-suffixes=DEFAULT \
1289a1d03eSRichard // RUN:   --header-filter='.*' --system-headers \
1389a1d03eSRichard // RUN:   -- -I %t/usr -isystem %t/sys -isystem %S/Inputs/deprecated-headers
1489a1d03eSRichard 
1589a1d03eSRichard // RUN: %check_clang_tidy -std=c++11 %s modernize-deprecated-headers %t \
1689a1d03eSRichard // RUN:   -check-suffixes=DEFAULT,CHECK-HEADER-FILE \
17*e8a3ddafSNathan James // RUN:   -config="{CheckOptions: {modernize-deprecated-headers.CheckHeaderFile: 'true'}}" \
1889a1d03eSRichard // RUN:   --header-filter='.*' --system-headers \
1989a1d03eSRichard // RUN:   -- -I %t/usr -isystem %t/sys -isystem %S/Inputs/deprecated-headers
2089a1d03eSRichard 
2189a1d03eSRichard // REQUIRES: system-linux
2289a1d03eSRichard 
2389a1d03eSRichard #define EXTERN_C extern "C"
2489a1d03eSRichard 
2589a1d03eSRichard extern "C++" {
2689a1d03eSRichard // We should still have the warnings here.
2789a1d03eSRichard #include <stdbool.h>
2889a1d03eSRichard // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:10: warning: including 'stdbool.h' has no effect in C++; consider removing it [modernize-deprecated-headers]
2989a1d03eSRichard }
3089a1d03eSRichard 
3189a1d03eSRichard #include <assert.h>
3289a1d03eSRichard // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
3389a1d03eSRichard 
3489a1d03eSRichard #include <stdbool.h>
3589a1d03eSRichard // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:10: warning: including 'stdbool.h' has no effect in C++; consider removing it [modernize-deprecated-headers]
3689a1d03eSRichard 
3789a1d03eSRichard #include <mysystemlib.h> // no-warning: Don't warn into system headers.
3889a1d03eSRichard 
3989a1d03eSRichard #include <mylib.h>
4089a1d03eSRichard // CHECK-MESSAGES-CHECK-HEADER-FILE: mylib.h:1:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
4189a1d03eSRichard 
4289a1d03eSRichard namespace wrapping {
4389a1d03eSRichard extern "C" {
4489a1d03eSRichard #include <assert.h>  // no-warning
4589a1d03eSRichard #include <mylib.h>   // no-warning
4689a1d03eSRichard #include <stdbool.h> // no-warning
4789a1d03eSRichard }
4889a1d03eSRichard } // namespace wrapping
4989a1d03eSRichard 
5089a1d03eSRichard extern "C" {
5189a1d03eSRichard namespace wrapped {
5289a1d03eSRichard #include <assert.h>  // no-warning
5389a1d03eSRichard #include <mylib.h>   // no-warning
5489a1d03eSRichard #include <stdbool.h> // no-warning
5589a1d03eSRichard } // namespace wrapped
5689a1d03eSRichard }
5789a1d03eSRichard 
5889a1d03eSRichard namespace wrapping {
5989a1d03eSRichard extern "C" {
6089a1d03eSRichard namespace wrapped {
6189a1d03eSRichard #include <assert.h>  // no-warning
6289a1d03eSRichard #include <mylib.h>   // no-warning
6389a1d03eSRichard #include <stdbool.h> // no-warning
6489a1d03eSRichard } // namespace wrapped
6589a1d03eSRichard }
6689a1d03eSRichard } // namespace wrapping
6789a1d03eSRichard 
6889a1d03eSRichard EXTERN_C {
6989a1d03eSRichard #include <assert.h>  // no-warning
7089a1d03eSRichard #include <mylib.h>   // no-warning
7189a1d03eSRichard #include <stdbool.h> // no-warning
7289a1d03eSRichard }
73