================
@@ -534,16 +557,43 @@ class TemplateArgumentLoc {
TemplateArgumentLoc(const TemplateArgument &Argument,
TemplateArgumentLocInfo Opaque)
- : Argument(Argument), LocInfo(Opaque) {}
+ : Argument(Argument), LocInfo(Opaque) {
+ switch (Argument.getKind()) {
+ case TemplateArgument::Null:
+ assert(Opaque.isNull());
+ return;
+ case TemplateArgument::Pack:
+ assert(Opaque.isTrivial());
+ return;
+ case TemplateArgument::NullPtr:
+ case TemplateArgument::Integral:
+ case TemplateArgument::Declaration:
+ case TemplateArgument::StructuralValue:
+ assert(Opaque.isTrivial() || Opaque.getAsExpr() != nullptr);
+ return;
+ case TemplateArgument::Expression:
+ assert(Opaque.getAsExpr() != nullptr);
+ return;
+ case TemplateArgument::Type:
+ assert(Opaque.getAsTypeSourceInfo() != nullptr);
+ return;
+ case TemplateArgument::Template:
+ case TemplateArgument::TemplateExpansion:
+ assert(Opaque.getTemplate() != nullptr);
----------------
mizvekov wrote:
The status quo is that we would expect clients to use the 'getTrivial*' methods
instead of using null infos like this, even if you are using a null
SourceLocation.
Is that a problem for your use case?
Even using null source locations is a mess by the way, because that would be
problematic if a diagnostic relied on pouting at it.
https://github.com/llvm/llvm-project/pull/187352
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits