r259901 - [modules] Separately track whether an identifier's preprocessor information and

Bruno Cardoso Lopes via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 17 23:04:27 PDT 2017


Hi Richard,

FTR, this caused http://bugs.llvm.org/show_bug.cgi?id=32693

Any suggestions on how to approach this?

On Fri, Feb 5, 2016 at 11:03 AM, Richard Smith via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: rsmith
> Date: Fri Feb  5 13:03:40 2016
> New Revision: 259901
>
> URL: http://llvm.org/viewvc/llvm-project?rev=259901&view=rev
> Log:
> [modules] Separately track whether an identifier's preprocessor information and
> name lookup information have changed since deserialization. For a C++ modules
> build, we do not need to re-emit the identifier into the serialized identifier
> table if only the name lookup information has changed (and in all cases, we
> don't need to re-emit the macro information if only the name lookup information
> has changed).
>
> Added:
>     cfe/trunk/test/Modules/minimal-identifier-tables.cpp
> Modified:
>     cfe/trunk/include/clang/Basic/IdentifierTable.h
>     cfe/trunk/lib/Basic/IdentifierTable.cpp
>     cfe/trunk/lib/Sema/IdentifierResolver.cpp
>     cfe/trunk/lib/Serialization/ASTWriter.cpp
>
> Modified: cfe/trunk/include/clang/Basic/IdentifierTable.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/IdentifierTable.h?rev=259901&r1=259900&r2=259901&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/IdentifierTable.h (original)
> +++ cfe/trunk/include/clang/Basic/IdentifierTable.h Fri Feb  5 13:03:40 2016
> @@ -62,6 +62,9 @@ class IdentifierInfo {
>                                     // partially) from an AST file.
>    bool ChangedAfterLoad       : 1; // True if identifier has changed from the
>                                     // definition loaded from an AST file.
> +  bool FEChangedAfterLoad     : 1; // True if identifier's frontend information
> +                                   // has changed from the definition loaded
> +                                   // from an AST file.
>    bool RevertedTokenID        : 1; // True if revertTokenIDToIdentifier was
>                                     // called.
>    bool OutOfDate              : 1; // True if there may be additional
> @@ -69,7 +72,7 @@ class IdentifierInfo {
>                                     // stored externally.
>    bool IsModulesImport        : 1; // True if this is the 'import' contextual
>                                     // keyword.
> -  // 30 bit left in 64-bit word.
> +  // 29 bit left in 64-bit word.
>
>    void *FETokenInfo;               // Managed by the language front-end.
>    llvm::StringMapEntry<IdentifierInfo*> *Entry;
> @@ -303,6 +306,18 @@ public:
>      ChangedAfterLoad = true;
>    }
>
> +  /// \brief Determine whether the frontend token information for this
> +  /// identifier has changed since it was loaded from an AST file.
> +  bool hasFETokenInfoChangedSinceDeserialization() const {
> +    return FEChangedAfterLoad;
> +  }
> +
> +  /// \brief Note that the frontend token information for this identifier has
> +  /// changed since it was loaded from an AST file.
> +  void setFETokenInfoChangedSinceDeserialization() {
> +    FEChangedAfterLoad = true;
> +  }
> +
>    /// \brief Determine whether the information for this identifier is out of
>    /// date with respect to the external source.
>    bool isOutOfDate() const { return OutOfDate; }
>
> Modified: cfe/trunk/lib/Basic/IdentifierTable.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/IdentifierTable.cpp?rev=259901&r1=259900&r2=259901&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/IdentifierTable.cpp (original)
> +++ cfe/trunk/lib/Basic/IdentifierTable.cpp Fri Feb  5 13:03:40 2016
> @@ -42,6 +42,7 @@ IdentifierInfo::IdentifierInfo() {
>    NeedsHandleIdentifier = false;
>    IsFromAST = false;
>    ChangedAfterLoad = false;
> +  FEChangedAfterLoad = false;
>    RevertedTokenID = false;
>    OutOfDate = false;
>    IsModulesImport = false;
>
> Modified: cfe/trunk/lib/Sema/IdentifierResolver.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/IdentifierResolver.cpp?rev=259901&r1=259900&r2=259901&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/IdentifierResolver.cpp (original)
> +++ cfe/trunk/lib/Sema/IdentifierResolver.cpp Fri Feb  5 13:03:40 2016
> @@ -381,7 +381,7 @@ void IdentifierResolver::updatingIdentif
>      PP.getExternalSource()->updateOutOfDateIdentifier(II);
>
>    if (II.isFromAST())
> -    II.setChangedSinceDeserialization();
> +    II.setFETokenInfoChangedSinceDeserialization();
>  }
>
>  //===----------------------------------------------------------------------===//
>
> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=259901&r1=259900&r2=259901&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri Feb  5 13:03:40 2016
> @@ -3162,6 +3162,8 @@ public:
>          NeedDecls(!IsModule || !Writer.getLangOpts().CPlusPlus),
>          InterestingIdentifierOffsets(InterestingIdentifierOffsets) {}
>
> +  bool needDecls() const { return NeedDecls; }
> +
>    static hash_value_type ComputeHash(const IdentifierInfo* II) {
>      return llvm::HashString(II->getName());
>    }
> @@ -3307,7 +3309,9 @@ void ASTWriter::WriteIdentifierTable(Pre
>        auto *II = const_cast<IdentifierInfo *>(IdentIDPair.first);
>        IdentID ID = IdentIDPair.second;
>        assert(II && "NULL identifier in identifier table");
> -      if (!Chain || !II->isFromAST() || II->hasChangedSinceDeserialization())
> +      if (!Chain || !II->isFromAST() || II->hasChangedSinceDeserialization() ||
> +          (Trait.needDecls() &&
> +           II->hasFETokenInfoChangedSinceDeserialization()))
>          Generator.insert(II, ID, Trait);
>      }
>
>
> Added: cfe/trunk/test/Modules/minimal-identifier-tables.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/minimal-identifier-tables.cpp?rev=259901&view=auto
> ==============================================================================
> --- cfe/trunk/test/Modules/minimal-identifier-tables.cpp (added)
> +++ cfe/trunk/test/Modules/minimal-identifier-tables.cpp Fri Feb  5 13:03:40 2016
> @@ -0,0 +1,10 @@
> +// RUN: rm -rf %t
> +// RUN: mkdir %t
> +// RUN: echo 'extern int some_long_variable_name;' > %t/x.h
> +// RUN: echo 'extern int some_long_variable_name;' > %t/y.h
> +// RUN: echo 'module X { header "x.h" } module Y { header "y.h" }' > %t/map
> +// RUN: %clang_cc1 -fmodules -x c++ -fmodule-name=X %t/map -emit-module -o %t/x.pcm
> +// RUN: %clang_cc1 -fmodules -x c++ -fmodule-name=Y %t/map -fmodule-file=%t/x.pcm -emit-module -o %t/y.pcm
> +// RUN: cat %t/y.pcm | FileCheck %s
> +//
> +// CHECK-NOT: some_long_variable_name
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc


More information about the cfe-commits mailing list