[clang-tools-extra] r187736 - Fixed incorrect include file exit detection. Added work-around to avoid error on header guard in nested include. Fixed a couple of coding standard issues on variable names.
Arnold Schwaighofer
aschwaighofer at apple.com
Mon Aug 5 15:07:44 PDT 2013
Hi John,
I have reverted the commit in 187746.
The following bots were broken for the past 2 hours:
http://lab.llvm.org:8011/builders/clang-native-arm-cortex-a9/builds/10248
http://bb.pgr.jp/builders/cmake-clang-i686-mingw32/builds/3327
Thanks,
Arnold
On Aug 5, 2013, at 3:13 PM, Arnold Schwaighofer <aschwaighofer at apple.com> wrote:
> Hi John,
>
> This commit (187736) appears to have broken
>
> http://bb.pgr.jp/builders/cmake-clang-i686-mingw32/builds/3327
>
> and our internal bots. Can you please fix or revert?
>
>
> Thanks,
> Arnold
>
> On Aug 5, 2013, at 2:15 PM, John Thompson <John.Thompson.JTSoftware at gmail.com> wrote:
>
>> Author: jtsoftware
>> Date: Mon Aug 5 14:15:50 2013
>> New Revision: 187736
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=187736&view=rev
>> Log:
>> Fixed incorrect include file exit detection. Added work-around to avoid error on header guard in nested include. Fixed a couple of coding standard issues on variable names.
>>
>> Modified:
>> clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp
>>
>> Modified: clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp
>> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp?rev=187736&r1=187735&r2=187736&view=diff
>> ==============================================================================
>> --- clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp (original)
>> +++ clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp Mon Aug 5 14:15:50 2013
>> @@ -818,8 +818,12 @@ public:
>> if (HeaderPath.startswith("<"))
>> return;
>> HeaderHandle H = addHeader(HeaderPath);
>> - if (H != getCurrentHeaderHandle())
>> + if (H != getCurrentHeaderHandle()) {
>> + // Check for nested header.
>> + if (!InNestedHeader)
>> + InNestedHeader = isHeaderHandleInStack(H);
>> pushHeaderHandle(H);
>> + }
>> }
>> // Handle exiting a header source file.
>> void handleHeaderExit(llvm::StringRef HeaderPath) {
>> @@ -831,6 +835,7 @@ public:
>> while ((H != getCurrentHeaderHandle()) && (HeaderStack.size() != 0))
>> popHeaderHandle();
>> }
>> + InNestedHeader = false;
>> }
>>
>> // Lookup/add string.
>> @@ -839,11 +844,13 @@ public:
>> // Get the handle of a header file entry.
>> // Return HeaderHandleInvalid if not found.
>> HeaderHandle findHeaderHandle(llvm::StringRef HeaderPath) const {
>> + std::string CanonicalPath(HeaderPath);
>> + std::replace(CanonicalPath.begin(), CanonicalPath.end(), '\\', '/');
>> HeaderHandle H = 0;
>> for (std::vector<StringHandle>::const_iterator I = HeaderPaths.begin(),
>> E = HeaderPaths.end();
>> I != E; ++I, ++H) {
>> - if (**I == HeaderPath)
>> + if (**I == CanonicalPath)
>> return H;
>> }
>> return HeaderHandleInvalid;
>> @@ -852,12 +859,12 @@ public:
>> // Add a new header file entry, or return existing handle.
>> // Return the header handle.
>> HeaderHandle addHeader(llvm::StringRef HeaderPath) {
>> - std::string canonicalPath(HeaderPath);
>> - std::replace(canonicalPath.begin(), canonicalPath.end(), '\\', '/');
>> - HeaderHandle H = findHeaderHandle(canonicalPath);
>> + std::string CanonicalPath(HeaderPath);
>> + std::replace(CanonicalPath.begin(), CanonicalPath.end(), '\\', '/');
>> + HeaderHandle H = findHeaderHandle(CanonicalPath);
>> if (H == HeaderHandleInvalid) {
>> H = HeaderPaths.size();
>> - HeaderPaths.push_back(addString(canonicalPath));
>> + HeaderPaths.push_back(addString(CanonicalPath));
>> }
>> return H;
>> }
>> @@ -993,6 +1000,9 @@ public:
>> bool ConditionValue,
>> llvm::StringRef ConditionUnexpanded,
>> InclusionPathHandle InclusionPathHandle) {
>> + // Ignore header guards, assuming the header guard is the only conditional.
>> + if (InNestedHeader)
>> + return;
>> StringHandle ConditionUnexpandedHandle(addString(ConditionUnexpanded));
>> PPItemKey InstanceKey(PP, ConditionUnexpandedHandle, H, InstanceLoc);
>> ConditionalExpansionMapIter I = ConditionalExpansions.find(InstanceKey);
>> @@ -1002,7 +1012,8 @@ public:
>> getSourceLocationString(PP, InstanceLoc) + ":\n" +
>> getSourceLine(PP, InstanceLoc) + "\n";
>> ConditionalExpansions[InstanceKey] =
>> - ConditionalTracker(DirectiveKind, ConditionValue, ConditionUnexpandedHandle,
>> + ConditionalTracker(DirectiveKind, ConditionValue,
>> + ConditionUnexpandedHandle,
>> InclusionPathHandle);
>> } else {
>> // We've seen the conditional before. Get its tracker.
>> @@ -1157,6 +1168,7 @@ private:
>> InclusionPathHandle CurrentInclusionPathHandle;
>> MacroExpansionMap MacroExpansions;
>> ConditionalExpansionMap ConditionalExpansions;
>> + bool InNestedHeader;
>> };
>>
>> // PreprocessorTracker functions.
>> @@ -1180,10 +1192,12 @@ void PreprocessorCallbacks::FileChanged(
>> PPTracker.handleHeaderEntry(PP, getSourceLocationFile(PP, Loc));
>> break;
>> case ExitFile:
>> - if (PrevFID.isInvalid())
>> - PPTracker.handleHeaderExit(RootHeaderFile);
>> - else
>> - PPTracker.handleHeaderExit(getSourceLocationFile(PP, Loc));
>> + {
>> + const clang::FileEntry *F =
>> + PP.getSourceManager().getFileEntryForID(PrevFID);
>> + if (F != NULL)
>> + PPTracker.handleHeaderExit(F->getName());
>> + }
>> break;
>> case SystemHeaderPragma:
>> case RenameFile:
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list