1//==--- DiagnosticSerializationKinds.td - serialization diagnostics -------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9let Component = "Serialization" in {
10let CategoryName = "AST Deserialization Issue" in {
11
12def err_fe_unable_to_read_pch_file : Error<
13    "unable to read PCH file %0: '%1'">;
14def err_fe_not_a_pch_file : Error<
15    "input is not a PCH file: '%0'">;
16def err_fe_pch_malformed : Error<
17    "malformed or corrupted AST file: '%0'">, DefaultFatal;
18def err_fe_pch_malformed_block : Error<
19    "malformed block record in PCH file: '%0'">, DefaultFatal;
20def err_fe_ast_file_modified : Error<
21    "file '%0' has been modified since the "
22    "%select{precompiled header|module file|AST file}1 '%2' was built"
23    ": %select{size|mtime|content}3 changed%select{| (was %5, now %6)}4">,
24    DefaultFatal;
25def err_fe_pch_file_overridden : Error<
26    "file '%0' from the precompiled header has been overridden">;
27def note_pch_required_by : Note<"'%0' required by '%1'">;
28def note_pch_rebuild_required : Note<"please rebuild precompiled header '%0'">;
29def note_module_cache_path : Note<
30    "after modifying system headers, please delete the module cache at '%0'">;
31
32def err_pch_targetopt_mismatch : Error<
33    "PCH file was compiled for the %0 '%1' but the current translation "
34    "unit is being compiled for target '%2'">;
35def err_pch_targetopt_feature_mismatch : Error<
36    "%select{AST file was|current translation unit is}0 compiled with the target "
37    "feature '%1' but the %select{current translation unit is|AST file was}0 "
38    "not">;
39def err_pch_langopt_mismatch : Error<"%0 was %select{disabled|enabled}1 in "
40    "PCH file but is currently %select{disabled|enabled}2">;
41def err_pch_langopt_value_mismatch : Error<
42  "%0 differs in PCH file vs. current file">;
43def err_pch_diagopt_mismatch : Error<"%0 is currently enabled, but was not in "
44  "the PCH file">;
45def err_pch_modulecache_mismatch : Error<"PCH was compiled with module cache "
46  "path '%0', but the path is currently '%1'">;
47
48def err_pch_version_too_old : Error<
49    "PCH file uses an older PCH format that is no longer supported">;
50def err_pch_version_too_new : Error<
51    "PCH file uses a newer PCH format that cannot be read">;
52def err_pch_different_branch : Error<
53    "PCH file built from a different branch (%0) than the compiler (%1)">;
54def err_pch_with_compiler_errors : Error<
55    "PCH file contains compiler errors">;
56
57def err_module_file_conflict : Error<
58  "module '%0' is defined in both '%1' and '%2'">, DefaultFatal;
59def err_ast_file_not_found : Error<
60  "%select{PCH|module|AST}0 file '%1' not found%select{|: %3}2">, DefaultFatal;
61def err_ast_file_out_of_date : Error<
62  "%select{PCH|module|AST}0 file '%1' is out of date and "
63  "needs to be rebuilt%select{|: %3}2">, DefaultFatal;
64def err_ast_file_invalid : Error<
65  "file '%1' is not a valid precompiled %select{PCH|module|AST}0 file">, DefaultFatal;
66def note_module_file_imported_by : Note<
67  "imported by %select{|module '%2' in }1'%0'">;
68def err_module_file_not_module : Error<
69  "AST file '%0' was not built as a module">, DefaultFatal;
70def err_module_file_missing_top_level_submodule : Error<
71  "module file '%0' is missing its top-level submodule">, DefaultFatal;
72def note_module_file_conflict : Note<
73  "this is generally caused by modules with the same name found in multiple "
74  "paths">;
75
76def remark_module_import : Remark<
77  "importing module '%0'%select{| into '%3'}2 from '%1'">,
78  InGroup<ModuleImport>;
79
80def err_imported_module_not_found : Error<
81    "module '%0' in AST file '%1' %select{(imported by AST file '%2') |}4"
82    "is not defined in any loaded module map file; "
83    "maybe you need to load '%3'?">, DefaultFatal;
84def note_imported_by_pch_module_not_found : Note<
85    "consider adding '%0' to the header search path">;
86def err_imported_module_modmap_changed : Error<
87    "module '%0' %select{in|imported by}4 AST file '%1' found in a different module map file"
88    " (%2) than when the importing AST file was built (%3)">, DefaultFatal;
89def err_imported_module_relocated : Error<
90    "module '%0' was built in directory '%1' but now resides in "
91    "directory '%2'">, DefaultFatal;
92def err_module_different_modmap : Error<
93    "module '%0' %select{uses|does not use}1 additional module map '%2'"
94    "%select{| not}1 used when the module was built">;
95
96def err_pch_macro_def_undef : Error<
97    "macro '%0' was %select{defined|undef'd}1 in the precompiled header but "
98    "%select{undef'd|defined}1 on the command line">;
99def err_pch_macro_def_conflict : Error<
100    "definition of macro '%0' differs between the precompiled header ('%1') "
101    "and the command line ('%2')">;
102def err_pch_undef : Error<
103    "%select{command line contains|precompiled header was built with}0 "
104    "'-undef' but %select{precompiled header was not built with it|"
105    "it is not present on the command line}0">;
106def err_pch_pp_detailed_record : Error<
107    "%select{command line contains|precompiled header was built with}0 "
108    "'-detailed-preprocessing-record' but %select{precompiled header was not "
109    "built with it|it is not present on the command line}0">;
110
111def err_module_odr_violation_missing_decl : Error<
112  "%q0 from module '%1' is not present in definition of %q2"
113  "%select{ in module '%4'| provided earlier}3">, NoSFINAE;
114def note_module_odr_violation_no_possible_decls : Note<
115  "definition has no member %0">;
116def note_module_odr_violation_possible_decl : Note<
117  "declaration of %0 does not match">;
118def err_module_odr_violation_different_definitions : Error<
119  "%q0 has different definitions in different modules; "
120  "%select{definition in module '%2' is here|defined here}1">;
121def note_first_module_difference : Note<
122  "in first definition, possible difference is here">;
123def note_module_odr_violation_different_definitions : Note<
124  "definition in module '%0' is here">;
125def note_second_module_difference : Note<
126  "in second definition, possible difference is here">;
127
128def err_module_odr_violation_different_instantiations : Error<
129  "instantiation of %q0 is different in different modules">;
130
131def err_module_odr_violation_definition_data : Error <
132  "%q0 has different definitions in different modules; first difference is "
133  "%select{definition in module '%2'|defined here}1 found "
134  "%select{"
135  "%4 base %plural{1:class|:classes}4|"
136  "%4 virtual base %plural{1:class|:classes}4|"
137  "%ordinal4 base class with type %5|"
138  "%ordinal4 %select{non-virtual|virtual}5 base class %6|"
139  "%ordinal4 base class %5 with "
140  "%select{public|protected|private|no}6 access specifier}3">;
141
142def note_module_odr_violation_definition_data : Note <
143  "but in '%0' found "
144  "%select{"
145  "%2 base %plural{1:class|:classes}2|"
146  "%2 virtual base %plural{1:class|:classes}2|"
147  "%ordinal2 base class with different type %3|"
148  "%ordinal2 %select{non-virtual|virtual}3 base class %4|"
149  "%ordinal2 base class %3 with "
150  "%select{public|protected|private|no}4 access specifier}1">;
151
152def err_module_odr_violation_template_parameter : Error <
153  "%q0 has different definitions in different modules; first difference is "
154  "%select{definition in module '%2'|defined here}1 found "
155  "%select{"
156  "unnamed template parameter|"
157  "template parameter %5|"
158  "template parameter with %select{no |}4default argument|"
159  "template parameter with default argument}3">;
160
161def note_module_odr_violation_template_parameter : Note <
162  "but in '%0' found "
163  "%select{"
164  "unnamed template parameter %2|"
165  "template parameter %3|"
166  "template parameter with %select{no |}2default argument|"
167  "template parameter with different default argument}1">;
168
169def err_module_odr_violation_mismatch_decl : Error<
170  "%q0 has different definitions in different modules; first difference is "
171  "%select{definition in module '%2'|defined here}1 found "
172  "%select{end of class|public access specifier|private access specifier|"
173  "protected access specifier|static assert|field|method|type alias|typedef|"
174  "data member|friend declaration|function template}3">;
175def note_module_odr_violation_mismatch_decl : Note<"but in '%0' found "
176  "%select{end of class|public access specifier|private access specifier|"
177  "protected access specifier|static assert|field|method|type alias|typedef|"
178  "data member|friend declaration|function template}1">;
179
180def err_module_odr_violation_record : Error<
181  "%q0 has different definitions in different modules; first difference is "
182  "%select{definition in module '%2'|defined here}1 found "
183  "%select{"
184  "static assert with condition|"
185  "static assert with message|"
186  "static assert with %select{|no }4message|"
187  "%select{method %5|constructor|destructor}4|"
188  "%select{method %5|constructor|destructor}4 "
189    "is %select{not deleted|deleted}6|"
190  "%select{method %5|constructor|destructor}4 "
191    "is %select{not defaulted|defaulted}6|"
192  "%select{method %5|constructor|destructor}4 "
193    "is %select{|pure }6%select{not virtual|virtual}7|"
194  "%select{method %5|constructor|destructor}4 "
195    "is %select{not static|static}6|"
196  "%select{method %5|constructor|destructor}4 "
197    "is %select{not volatile|volatile}6|"
198  "%select{method %5|constructor|destructor}4 "
199    "is %select{not const|const}6|"
200  "%select{method %5|constructor|destructor}4 "
201    "is %select{not inline|inline}6|"
202  "%select{method %5|constructor|destructor}4 "
203    "that has %6 parameter%s6|"
204  "%select{method %5|constructor|destructor}4 "
205    "with %ordinal6 parameter of type %7%select{| decayed from %9}8|"
206  "%select{method %5|constructor|destructor}4 "
207    "with %ordinal6 parameter named %7|"
208  "%select{method %5|constructor|destructor}4 "
209    "with %ordinal6 parameter with%select{out|}7 a default argument|"
210  "%select{method %5|constructor|destructor}4 "
211    "with %ordinal6 parameter with a default argument|"
212  "%select{method %5|constructor|destructor}4 "
213    "with %select{no |}6template arguments|"
214  "%select{method %5|constructor|destructor}4 "
215    "with %6 template argument%s6|"
216  "%select{method %5|constructor|destructor}4 "
217    "with %6 for %ordinal7 template argument|"
218  "%select{method %5|constructor|destructor}4 "
219    "with %select{no body|body}6|"
220  "%select{method %5|constructor|destructor}4 "
221    "with body|"
222  "friend %select{class|function}4|"
223  "friend %4|"
224  "friend function %4|"
225  "function template %4 with %5 template parameter%s5|"
226  "function template %4 with %ordinal5 template parameter being a "
227    "%select{type|non-type|template}6 template parameter|"
228  "function template %4 with %ordinal5 template parameter "
229    "%select{with no name|named %7}6|"
230  "function template %4 with %ordinal5 template parameter with "
231    "%select{no |}6default argument|"
232  "function template %4 with %ordinal5 template parameter with "
233    "default argument %6|"
234  "function template %4 with %ordinal5 template parameter with one type|"
235  "function template %4 with %ordinal5 template parameter %select{not |}6"
236    "being a template parameter pack|"
237  "}3">;
238
239def note_module_odr_violation_record : Note<"but in '%0' found "
240  "%select{"
241  "static assert with different condition|"
242  "static assert with different message|"
243  "static assert with %select{|no }2message|"
244  "%select{method %3|constructor|destructor}2|"
245  "%select{method %3|constructor|destructor}2 "
246    "is %select{not deleted|deleted}4|"
247  "%select{method %3|constructor|destructor}2 "
248    "is %select{not defaulted|defaulted}4|"
249  "%select{method %3|constructor|destructor}2 "
250    "is %select{|pure }4%select{not virtual|virtual}5|"
251  "%select{method %3|constructor|destructor}2 "
252    "is %select{not static|static}4|"
253  "%select{method %3|constructor|destructor}2 "
254    "is %select{not volatile|volatile}4|"
255  "%select{method %3|constructor|destructor}2 "
256    "is %select{not const|const}4|"
257  "%select{method %3|constructor|destructor}2 "
258    "is %select{not inline|inline}4|"
259  "%select{method %3|constructor|destructor}2 "
260    "that has %4 parameter%s4|"
261  "%select{method %3|constructor|destructor}2 "
262    "with %ordinal4 parameter of type %5%select{| decayed from %7}6|"
263  "%select{method %3|constructor|destructor}2 "
264    "with %ordinal4 parameter named %5|"
265  "%select{method %3|constructor|destructor}2 "
266    "with %ordinal4 parameter with%select{out|}5 a default argument|"
267  "%select{method %3|constructor|destructor}2 "
268    "with %ordinal4 parameter with a different default argument|"
269  "%select{method %3|constructor|destructor}2 "
270    "with %select{no |}4template arguments|"
271  "%select{method %3|constructor|destructor}2 "
272    "with %4 template argument%s4|"
273  "%select{method %3|constructor|destructor}2 "
274    "with %4 for %ordinal5 template argument|"
275  "%select{method %3|constructor|destructor}2 "
276    "with %select{no body|body}4|"
277  "%select{method %3|constructor|destructor}2 "
278    "with different body|"
279  "friend %select{class|function}2|"
280  "friend %2|"
281  "friend function %2|"
282  "function template %2 with %3 template parameter%s3|"
283  "function template %2 with %ordinal3 template paramter being a "
284    "%select{type|non-type|template}4 template parameter|"
285  "function template %2 with %ordinal3 template parameter "
286    "%select{with no name|named %5}4|"
287  "function template %2 with %ordinal3 template parameter with "
288    "%select{no |}4default argument|"
289  "function template %2 with %ordinal3 template parameter with "
290    "default argument %4|"
291  "function template %2 with %ordinal3 template parameter with different type|"
292  "function template %2 with %ordinal3 template parameter %select{not |}4"
293    "being a template parameter pack|"
294  "}1">;
295
296def err_module_odr_violation_field : Error<
297  "%q0 has different definitions in different modules; first difference is "
298  "%select{definition in module '%2'|defined here}1 found "
299  "%select{"
300  "field %4|"
301  "field %4 with type %5|"
302  "%select{non-|}5bitfield %4|"
303  "bitfield %4 with one width expression|"
304  "%select{non-|}5mutable field %4|"
305  "field %4 with %select{no|an}5 initalizer|"
306  "field %4 with an initializer"
307  "}3">;
308def note_module_odr_violation_field : Note<"but in '%0' found "
309  "%select{"
310  "field %2|"
311  "field %2 with type %3|"
312  "%select{non-|}3bitfield %2|"
313  "bitfield %2 with different width expression|"
314  "%select{non-|}3mutable field %2|"
315  "field %2 with %select{no|an}3 initializer|"
316  "field %2 with a different initializer"
317  "}1">;
318
319def err_module_odr_violation_typedef : Error<
320  "%q0 has different definitions in different modules; first difference is "
321  "%select{definition in module '%2'|defined here}1 found "
322  "%select{"
323  "%select{typedef|type alias}4 name %5|"
324  "%select{typedef|type alias}4 %5 with underlying type %6"
325  "}3">;
326def note_module_odr_violation_typedef : Note<"but in '%0' found "
327  "%select{"
328  "%select{typedef|type alias}2 name %3|"
329  "%select{typedef|type alias}2 %3 with different underlying type %4"
330  "}1">;
331
332def err_module_odr_violation_variable : Error<
333  "%q0 has different definitions in different modules; first difference is "
334  "%select{definition in module '%2'|defined here}1 found "
335  "%select{"
336  "data member with name %4|"
337  "data member %4 with type %5|"
338  "data member %4 with%select{out|}5 an initializer|"
339  "data member %4 with an initializer|"
340  "data member %4 %select{is constexpr|is not constexpr}5"
341  "}3">;
342def note_module_odr_violation_variable : Note<"but in '%0' found "
343  "%select{"
344  "data member with name %2|"
345  "data member %2 with different type %3|"
346  "data member %2 with%select{out|}3 an initializer|"
347  "data member %2 with a different initializer|"
348  "data member %2 %select{is constexpr|is not constexpr}3"
349  "}1">;
350
351def err_module_odr_violation_function : Error<
352  "%q0 has different definitions in different modules; "
353  "%select{definition in module '%2'|defined here}1 "
354  "first difference is "
355  "%select{"
356  "return type is %4|"
357  "%ordinal4 parameter with name %5|"
358  "%ordinal4 parameter with type %5%select{| decayed from %7}6|"
359  "%ordinal4 parameter with%select{out|}5 a default argument|"
360  "%ordinal4 parameter with a default argument|"
361  "function body"
362  "}3">;
363
364def note_module_odr_violation_function : Note<"but in '%0' found "
365  "%select{"
366  "different return type %2|"
367  "%ordinal2 parameter with name %3|"
368  "%ordinal2 parameter with type %3%select{| decayed from %5}4|"
369  "%ordinal2 parameter with%select{out|}3 a default argument|"
370  "%ordinal2 parameter with a different default argument|"
371  "a different body"
372  "}1">;
373
374def err_module_odr_violation_enum : Error<
375  "%q0 has different definitions in different modules; "
376  "%select{definition in module '%2'|defined here}1 "
377  "first difference is "
378  "%select{"
379  "enum that is %select{not scoped|scoped}4|"
380  "enum scoped with keyword %select{struct|class}4|"
381  "enum %select{without|with}4 specified type|"
382  "enum with specified type %4|"
383  "enum with %4 element%s4|"
384  "%ordinal4 element has name %5|"
385  "%ordinal4 element %5 %select{has|does not have}6 an initializer|"
386  "%ordinal4 element %5 has an initializer|"
387  "}3">;
388
389def note_module_odr_violation_enum : Note<"but in '%0' found "
390  "%select{"
391  "enum that is %select{not scoped|scoped}2|"
392  "enum scoped with keyword %select{struct|class}2|"
393  "enum %select{without|with}2 specified type|"
394  "enum with specified type %2|"
395  "enum with %2 element%s2|"
396  "%ordinal2 element has name %3|"
397  "%ordinal2 element %3 %select{has|does not have}4 an initializer|"
398  "%ordinal2 element %3 has different initializer|"
399  "}1">;
400
401def err_module_odr_violation_mismatch_decl_unknown : Error<
402  "%q0 %select{with definition in module '%2'|defined here}1 has different "
403  "definitions in different modules; first difference is this "
404  "%select{||||static assert|field|method|type alias|typedef|data member|"
405  "friend declaration|function template|"
406  "unexpected decl}3">;
407def note_module_odr_violation_mismatch_decl_unknown : Note<
408  "but in '%0' found "
409  "%select{||||different static assert|different field|different method|"
410  "different type alias|different typedef|different data member|"
411  "different friend declaration|different function template|"
412  "another unexpected decl}1">;
413
414def warn_duplicate_module_file_extension : Warning<
415  "duplicate module file extension block name '%0'">,
416  InGroup<ModuleFileExtension>;
417
418def warn_module_system_bit_conflict : Warning<
419  "module file '%0' was validated as a system module and is now being imported "
420  "as a non-system module; any difference in diagnostic options will be ignored">,
421  InGroup<ModuleConflict>;
422} // let CategoryName
423
424let CategoryName = "AST Serialization Issue" in {
425def warn_module_uses_date_time : Warning<
426  "%select{precompiled header|module}0 uses __DATE__ or __TIME__">,
427  InGroup<DiagGroup<"pch-date-time">>;
428def err_module_no_size_mtime_for_header : Error<
429  "cannot emit module %0: %select{size|mtime}1 must be explicitly specified "
430  "for missing header file \"%2\"">;
431def err_module_unable_to_hash_content : Error<
432  "failed to hash content for '%0' because memory buffer cannot be retrieved">;
433} // let CategoryName
434} // let Component
435
436