[PATCH] Initial pass at API design for DebugInfo/PDB

David Blaikie dblaikie at gmail.com
Fri Feb 6 10:10:33 PST 2015


Few optional bits of feedback but otherwise seems fine.

If you want some more help/details on the .def stuff, let me know - happy to go through it.


================
Comment at: lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp:64
@@ +63,3 @@
+
+// All of the concrete symbol types have their methods declared inline through
+// the use of a forwarding macro, so the constructor should be declared out of
----------------
This still means the vtable is emitted weakly, though it will only be emitted in one place. So this doesn't quite meet the style guide's requirement & I'd rather use the virtual dtor or an explicit anchor function, but I'm not so fussed. I do think the rule is a bit silly, but I'm not sure this particular approach is worthwhile (I suppose my thought is that the rule is silly enough that it's not worth partly/tangentially/sort-of adhering to, might as well just not bother adhering to it at all, perhaps - I dunno)

================
Comment at: lib/DebugInfo/PDB/PDBSymbol.cpp:56
@@ +55,3 @@
+
+#define FACTORY_SYMTAG_CASE(Tag, Type)                                         \
+  case PDB_SymType::Tag:                                                       \
----------------
Could possibly move the #define closer to the use (even inside the function) and maybe undef it afterwards.

================
Comment at: lib/DebugInfo/PDB/PDBSymbol.cpp:63
@@ +62,3 @@
+  switch (Symbol->getSymTag()) {
+    FACTORY_SYMTAG_CASE(Exe, PDBSymbolExe)
+    FACTORY_SYMTAG_CASE(Compiland, PDBSymbolCompiland)
----------------
Would it be useful to do this more as a .def file style - Take a look at Duncan's recent use of include/llvm/IR/Metadata.def for an example (essentially have the big long list of all the PDBSymbols written once, in one file - then #define a macro for what you want to do with those names, then include the file - thus stamping out all sorts of things you want, for all PDBSymbols)

================
Comment at: unittests/DebugInfo/PDB/PDBApiTest.cpp:53
@@ +52,3 @@
+#define MOCK_SYMBOL_ACCESSOR(Func)                                             \
+  auto Func() const->decltype(((IPDBRawSymbol *)nullptr)->Func()) override {   \
+    typedef decltype(IPDBRawSymbol::Func()) ReturnType;                        \
----------------
Probably prefer the LHS return type. The only reason to use the -> return type formulation is if you want to refer to function parameters, generally.

Also, rather than casting nullptr, the usual way to "give me a thing of some particular kind in an unevaluated context" is a utility called declval:

  decltype(declval<IPDBRawSymbol>().Func()) Func() const override {



================
Comment at: unittests/DebugInfo/PDB/PDBApiTest.cpp:62
@@ +61,3 @@
+
+  virtual void dump(llvm::raw_ostream &OS) const {}
+
----------------
Use override rather than virtual (for all of these).

http://reviews.llvm.org/D7356

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list