rmaz created this revision. Herald added a project: All. rmaz requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When calculating the ODR hash of a `FunctionNoProtoType` do not include qualifiers derived from `FastTypeQuals`. These are only defined in the constructor for `FunctionProtoType`. This change ensures the ODR hash and PCM output is stable for and modules containing `FunctionNoProtoType`s. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D133586 Files: clang/lib/AST/ODRHash.cpp Index: clang/lib/AST/ODRHash.cpp =================================================================== --- clang/lib/AST/ODRHash.cpp +++ clang/lib/AST/ODRHash.cpp @@ -889,9 +889,12 @@ void VisitFunctionType(const FunctionType *T) { AddQualType(T->getReturnType()); T->getExtInfo().Profile(ID); - Hash.AddBoolean(T->isConst()); - Hash.AddBoolean(T->isVolatile()); - Hash.AddBoolean(T->isRestrict()); + if (T->isFunctionProtoType()) { + // These values are undefined for FunctionNoProtoType + Hash.AddBoolean(T->isConst()); + Hash.AddBoolean(T->isVolatile()); + Hash.AddBoolean(T->isRestrict()); + } VisitType(T); }
Index: clang/lib/AST/ODRHash.cpp =================================================================== --- clang/lib/AST/ODRHash.cpp +++ clang/lib/AST/ODRHash.cpp @@ -889,9 +889,12 @@ void VisitFunctionType(const FunctionType *T) { AddQualType(T->getReturnType()); T->getExtInfo().Profile(ID); - Hash.AddBoolean(T->isConst()); - Hash.AddBoolean(T->isVolatile()); - Hash.AddBoolean(T->isRestrict()); + if (T->isFunctionProtoType()) { + // These values are undefined for FunctionNoProtoType + Hash.AddBoolean(T->isConst()); + Hash.AddBoolean(T->isVolatile()); + Hash.AddBoolean(T->isRestrict()); + } VisitType(T); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits