[PATCH] D16135: Macro Debug Info support in Clang

Adrian Prantl via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 1 11:07:20 PST 2017


aprantl added a comment.

Thanks! Couple more inline comments.



================
Comment at: lib/CodeGen/CGDebugInfo.h:415
 
+  /// Get macro debug info.
+  llvm::DIMacro *CreateMacro(llvm::DIMacroFile *Parent, unsigned MType,
----------------
It would be good to be a bit more descriptive here. If the comment just repeats the name of the function it is not worth keeping,
/// Create debug info for a macro (definition/use/?).


================
Comment at: lib/CodeGen/CGDebugInfo.h:420
+
+  /// Get temporary macro file debug info.
+  llvm::DIMacroFile *CreateTempMacroFile(llvm::DIMacroFile *Parent,
----------------
E.g.,
/// Create debug info for a file referenced by an #include directive.


================
Comment at: lib/CodeGen/MacroPPCallbacks.cpp:44
+    if (MI.isGNUVarargs())
+      Name << "..."; // #define foo(x...)
+
----------------
aaboud wrote:
> aprantl wrote:
> > LLVM style prefers comments to be full sentences and above the code.
> As I said above, this code is taken from "lib\Frontend\PrintPreprocessedOutput.cpp"
> Also, I ran clang-format on it, and it did not suggest to change this line.
> 
> But, I do not mind fixing this, if it is the preferred comment style.
I think it would be a good idea to clean this up. Feel free to either do this now or in a separate commit.


================
Comment at: lib/CodeGen/MacroPPCallbacks.cpp:154
+    StringRef SearchPath, StringRef RelativePath, const Module *Imported) {
+  // Only care about "include" directives.
+  if (!IncludeTok.is(tok::identifier))
----------------
aaboud wrote:
> aprantl wrote:
> > #include as opposed to #import? If so, why?
> I am not familiar with "#import" keyword.
> 1. Is it handled differently by clang that #include?
> 2. Do we need to generate macro debug info for it?
> 
> The reason I have this switch below, is that I am not sure if we call this "InclusionDirective" callback for identifiers that are not "#include".
> 
> However, I see no harm of updating the LastHashLoc every time we enter this function. The value will not be used unless it is set just before calling "FileChanged"callback.
#import comes from Objective-C. It is equivalent to #include + #pragma once.
I'm curious whether this comment means that it isn't handled?


================
Comment at: lib/CodeGen/MacroPPCallbacks.cpp:88
+  // Invalid location represents line zero.
+  return SourceLocation();
+}
----------------
I think the entire function can be replaced with
```
if ((Status == MainFileScope) ||
    (Status == CommandLineScopeIncludes && CommandIncludeFiles))
  return Loc;
return SourceLocation();
```


================
Comment at: lib/CodeGen/MacroPPCallbacks.cpp:100
+  bool CreateMacroFile = false;
+  bool PopScope = false;
+  SourceLocation LineLoc = getCorrectLocation(LastHashLoc);
----------------
Could you try splitting this function up into two functions?

MacroPPCallbacks::FileEntered()
MacroPPCallbacks::FileExited()

and the common code factored out into a helper? The control flow here seems unnecessarily complex with all the flags.


================
Comment at: lib/CodeGen/MacroPPCallbacks.cpp:177
+  llvm::raw_string_ostream Value(ValueBuffer);
+  calculatMacroDefinition(*Id, *MD->getMacroInfo(), PP, Name, Value);
+  Gen->getCGDebugInfo()->CreateMacro(getCurrentScope(),
----------------
calculat*e*MacroDefinition
(is there a better word than calculate?)


https://reviews.llvm.org/D16135





More information about the cfe-commits mailing list