[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 13:13:38 PDT 2013
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
More information about the cfe-commits
mailing list