From f9660e628f7ba83809b3543ee39ae78a20a353a0 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 1 Sep 2015 02:35:58 +0000 Subject: [PATCH] Don't use fprintf to emit this diagnostic! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246526 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSerializationKinds.td | 4 ++++ lib/Serialization/ASTWriter.cpp | 6 +++--- test/PCH/datetime.c | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 test/PCH/datetime.c diff --git a/include/clang/Basic/DiagnosticSerializationKinds.td b/include/clang/Basic/DiagnosticSerializationKinds.td index bd81c8041f..272cc7bf6b 100644 --- a/include/clang/Basic/DiagnosticSerializationKinds.td +++ b/include/clang/Basic/DiagnosticSerializationKinds.td @@ -111,6 +111,10 @@ def note_module_odr_violation_different_definitions : Note< def err_module_odr_violation_different_instantiations : Error< "instantiation of %q0 is different in different modules">; +def warn_module_uses_date_time : Warning< + "%select{precompiled header|module}0 uses __DATE__ or __TIME__">, + InGroup>; + } // let CategoryName } // let Component diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 29af1be917..0349378076 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -43,6 +43,7 @@ #include "clang/Sema/IdentifierResolver.h" #include "clang/Sema/Sema.h" #include "clang/Serialization/ASTReader.h" +#include "clang/Serialization/SerializationDiagnostic.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" #include "llvm/ADT/Hashing.h" @@ -2054,10 +2055,9 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { Stream.EnterSubblock(PREPROCESSOR_BLOCK_ID, 3); // If the AST file contains __DATE__ or __TIME__ emit a warning about this. - // FIXME: use diagnostics subsystem for localization etc. + // FIXME: Include a location for the use, and say which one was used. if (PP.SawDateOrTime()) - fprintf(stderr, "warning: precompiled header used __DATE__ or __TIME__.\n"); - + PP.Diag(SourceLocation(), diag::warn_module_uses_date_time) << IsModule; // Loop over all the macro directives that are live at the end of the file, // emitting each to the PP section. diff --git a/test/PCH/datetime.c b/test/PCH/datetime.c new file mode 100644 index 0000000000..801c0c7104 --- /dev/null +++ b/test/PCH/datetime.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -x c-header %s -emit-pch -o %t 2>&1 | FileCheck %s +// CHECK: precompiled header uses __DATE__ or __TIME__ +const char *p = __DATE__; -- 2.40.0