rtrieu added a comment. In http://reviews.llvm.org/D12379#245868, @zhengkai wrote:
> In http://reviews.llvm.org/D12379#245861, @rtrieu wrote: > > > In http://reviews.llvm.org/D12379#245850, @zhengkai wrote: > > > > > In http://reviews.llvm.org/D12379#245849, @rtrieu wrote: > > > > > > > Why are you leaking the raw encoding of locations from the > > > > SourceManager? This is an internal implementation detail and should > > > > not be relied on externally. SourceLocation is the typical way to use > > > > locations. > > > > > > > > > Because I want to check if all the ranges fit in the same argument of one > > > macro invocation, they can be different Source Locations. In > > > ExpansionInfo, these locations have the same ExpansionLocStart. > > > > > > If you call ExpansionInfo::getExpansionLocStart(), then the SourceLocation > > will be the same if the ExpansionLocStart is the same. > > > But I still need to change the isMacroArg function to get the result of > getExpansionLocStart(), and if I want to compare two SourceLocation, I still > need to check the raw encoding. I don't know if it is needed not to leak the > raw encoding. I kind of see what you are trying to do here, and we should fix it a different way. 1. Get rid of changes to ExpansionInfo 2. Change the function SourceManager::isMacroArgExpansion to take two arguments instead of one. The new argument should be a SourceLocation pointer named MacroBegin. 3. Change the last line of SourceManager::isMacroArgExpansion from "return Expansion.isMacroArgExpansion();" to "if (!Expansion.isMacroArgExpansion()) return false;" After that, add the code to get the macro begin location. 4. Update DiagnosticRenderer to use SourceLocation instead of raw encodings. http://reviews.llvm.org/D12379 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits