[PATCH] D156966: [TableGen] Improve error report of unspecified arguments

Wang Pengcheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 3 00:09:31 PDT 2023


wangpc updated this revision to Diff 546721.
wangpc added a comment.

Fix tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156966/new/

https://reviews.llvm.org/D156966

Files:
  llvm/lib/TableGen/TGParser.cpp
  llvm/test/TableGen/template-args.td


Index: llvm/test/TableGen/template-args.td
===================================================================
--- llvm/test/TableGen/template-args.td
+++ llvm/test/TableGen/template-args.td
@@ -6,9 +6,12 @@
 // RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s
 // RUN: not llvm-tblgen -DERROR6 %s 2>&1 | FileCheck --check-prefix=ERROR6 %s
 // RUN: not llvm-tblgen -DERROR7 %s 2>&1 | FileCheck --check-prefix=ERROR7 %s
+// RUN: not llvm-tblgen -DERROR8 %s 2>&1 | FileCheck --check-prefix=ERROR8 %s
+// RUN: not llvm-tblgen -DERROR9 %s 2>&1 | FileCheck --check-prefix=ERROR9 %s
+// RUN: not llvm-tblgen -DERROR10 %s 2>&1 | FileCheck --check-prefix=ERROR10 %s
 
-// This file tests that template arguments are type-checked and cast
-// if necessary.
+// This file tests that all required arguments are specified and template
+// arguments are type-checked and cast if necessary.
 
 // Class template arguments.
 
@@ -151,3 +154,23 @@
 defm MissingComma : TwoArgs<2 "two">;
 // ERROR7: [[#@LINE-1]]:31: error: Expected comma before next argument
 #endif
+
+#ifdef ERROR8
+def error8: Class1;
+// ERROR8: value not specified for template argument 'Class1:nm'
+// ERROR8: 18:21: note: declared in 'Class1'
+#endif
+
+#ifdef ERROR9
+defm error9: MC1;
+// ERROR9: value not specified for template argument 'MC1::nm'
+// ERROR9: 99:23: note: declared in 'MC1'
+#endif
+
+#ifdef ERROR10
+def error10 {
+  int value = Class2<>.Code;
+}
+// ERROR10: value not specified for template argument 'Class2:cd'
+// ERROR10: 37:22: note: declared in 'Class2'
+#endif
Index: llvm/lib/TableGen/TGParser.cpp
===================================================================
--- llvm/lib/TableGen/TGParser.cpp
+++ llvm/lib/TableGen/TGParser.cpp
@@ -593,10 +593,11 @@
   for (auto *UnsolvedArgName : UnsolvedArgNames) {
     Init *Default = Rec->getValue(UnsolvedArgName)->getValue();
     if (!Default->isComplete()) {
-      return Error(Loc, "value not specified for template argument (" +
-                            UnsolvedArgName->getAsUnquotedString() +
-                            ") of multiclass '" + Rec->getNameInitAsString() +
-                            "'");
+      std::string Name = UnsolvedArgName->getAsUnquotedString();
+      Error(Loc, "value not specified for template argument '" + Name + "'");
+      PrintNote(Rec->getFieldLoc(Name),
+                "declared in '" + Rec->getNameInitAsString() + "'");
+      return true;
     }
     ArgValueHandler(UnsolvedArgName, Default);
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156966.546721.patch
Type: text/x-patch
Size: 2518 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230803/3aea380a/attachment.bin>


More information about the llvm-commits mailing list