mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-13 17:37:00 +00:00

r293123 started serializing diagnostic pragma state for modules. This makes the serialization work properly for implicit modules. An implicit module build (using Clang's internal build system) uses the same PCM file location for different `-Werror` levels. E.g., if a TU has `-Werror=format` and tries to load a PCM built without `-Werror=format`, a new PCM will be built in its place (and the new PCM should have the same signature, since r297655). In the other direction, if a TU does not have `-Werror=format` and tries to load a PCM built with `-Werror=format`, it should "just work". The idea is to evolve the PCM toward the strictest -Werror flags that anyone tries. r293123 started serializing the diagnostic pragma state for each PCM. Since this encodes the -Werror settings at module-build time, it breaks the implicit build model. This commit filters the diagnostic state in order to simulate the current compilation's diagnostic settings. Firstly, it ignores the module's serialized first diagnostic state, replacing it with the state from this compilation's command-line. Secondly, if a pragma warning was upgraded to error/fatal when generating the PCM (e.g., due to `-Werror` on the command-line), it checks whether it should still be upgraded in its current context. llvm-svn: 300025
43 lines
2.0 KiB
C++
43 lines
2.0 KiB
C++
// Check that implicit modules builds give correct diagnostics, even when
|
|
// reusing a module built with strong -Werror flags.
|
|
//
|
|
// Clear the caches.
|
|
// RUN: rm -rf %t.cache %t-pragma.cache
|
|
//
|
|
// Build with -Werror, then with -W, and then with neither.
|
|
// RUN: not %clang_cc1 -triple x86_64-apple-darwin16 -fsyntax-only -fmodules \
|
|
// RUN: -Werror=shorten-64-to-32 \
|
|
// RUN: -I%S/Inputs/implicit-built-Werror-using-W -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t.cache -x c++ %s 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=CHECK-ERROR
|
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin16 -fsyntax-only -fmodules \
|
|
// RUN: -Wshorten-64-to-32 \
|
|
// RUN: -I%S/Inputs/implicit-built-Werror-using-W -fimplicit-module-maps \
|
|
// RUN: -fdisable-module-hash \
|
|
// RUN: -fmodules-cache-path=%t.cache -x c++ %s 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=CHECK-WARN
|
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin16 -fsyntax-only -fmodules \
|
|
// RUN: -I%S/Inputs/implicit-built-Werror-using-W -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t.cache -x c++ %s 2>&1 \
|
|
// RUN: | FileCheck %s -allow-empty
|
|
//
|
|
// In the presence of a warning pragma, build with -Werror and then without.
|
|
// RUN: not %clang_cc1 -triple x86_64-apple-darwin16 -fsyntax-only -fmodules \
|
|
// RUN: -DUSE_PRAGMA -Werror=shorten-64-to-32 \
|
|
// RUN: -I%S/Inputs/implicit-built-Werror-using-W -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t-pragma.cache -x c++ %s 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=CHECK-ERROR
|
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin16 -fsyntax-only -fmodules \
|
|
// RUN: -DUSE_PRAGMA \
|
|
// RUN: -I%S/Inputs/implicit-built-Werror-using-W -fimplicit-module-maps \
|
|
// RUN: -fmodules-cache-path=%t-pragma.cache -x c++ %s 2>&1 \
|
|
// RUN: | FileCheck %s -check-prefix=CHECK-WARN
|
|
#include <convert.h>
|
|
|
|
long long foo() { return convert<long long>(0); }
|
|
|
|
// CHECK-ERROR: error: implicit conversion
|
|
// CHECK-WARN: warning: implicit conversion
|
|
// CHECK-NOT: error: implicit conversion
|
|
// CHECK-NOT: warning: implicit conversion
|