include-what-you-use/tests/cxx/pch_in_code.cc

53 lines
1.8 KiB
C++

//===--- pch_in_code.cc - test input file for iwyu ------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// IWYU_ARGS: -Xiwyu --pch_in_code -Xiwyu --prefix_header_includes=remove -I .
// Test IWYU's handling of precompiled headers explicitly included in code.
// This is a pattern popularized by MSVC and allowed by GCC, where an include
// directive is used as a marker to signal that a precompiled header should be
// pulled into the translation unit.
//
// Under these compilers' rules, the precompiled header must be included first.
//
// A PCH lives under special rules:
// - should never be removed
// - all headers included in it are considered prefix headers
// - always stays the first include, no matter what changes IWYU makes
//
// This test assumes being run with --prefix_header_includes=remove and
// --pch_in_code.
#include "tests/cxx/pch.h" // this is the precompiled header
// Associated header needs to be in a subdirectory to provoke
// first-include-with-same-basename heuristic, which is sensitive to the
// presence of a PCH.
#include "tests/cxx/public/pch_in_code.h"
#include <stdlib.h> // unused
#include <stdint.h> // for int8_t
#include "tests/cxx/indirect.h"
IndirectClass ic;
int8_t global_byte;
/**** IWYU_SUMMARY
tests/cxx/pch_in_code.cc should add these lines:
tests/cxx/pch_in_code.cc should remove these lines:
- #include <stdlib.h> // lines XX-XX
- #include "tests/cxx/indirect.h" // lines XX-XX
The full include-list for tests/cxx/pch_in_code.cc:
#include "tests/cxx/pch.h"
#include "tests/cxx/public/pch_in_code.h"
#include <stdint.h> // for int8_t
***** IWYU_SUMMARY */