[PATCH] D80360: [PCH] Support writing BuiltinBitCastExprs to PCHs
hyd-dev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 10 02:41:37 PDT 2020
hyd-dev updated this revision to Diff 269765.
hyd-dev marked an inline comment as done.
hyd-dev added a comment.
Address the comment: remove `PathSize` from `BuiltinBitCastExpr`'s constructor and `assert()` it `== 0`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80360/new/
https://reviews.llvm.org/D80360
Files:
clang/include/clang/AST/ExprCXX.h
clang/include/clang/Serialization/ASTBitCodes.h
clang/lib/Serialization/ASTReaderStmt.cpp
clang/lib/Serialization/ASTWriterStmt.cpp
clang/test/PCH/builtin-bit-cast.cpp
Index: clang/test/PCH/builtin-bit-cast.cpp
===================================================================
--- /dev/null
+++ clang/test/PCH/builtin-bit-cast.cpp
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -emit-pch -o %t %s
+// RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s
+// expected-no-diagnostics
+
+#ifndef HEADER
+#define HEADER
+
+template <class T, class U>
+constexpr T BuiltinBitCastWrapper(const U &Arg) {
+ return __builtin_bit_cast(T, Arg);
+}
+
+#else
+
+int main() {
+ return BuiltinBitCastWrapper<int>(0);
+}
+
+#endif
Index: clang/lib/Serialization/ASTWriterStmt.cpp
===================================================================
--- clang/lib/Serialization/ASTWriterStmt.cpp
+++ clang/lib/Serialization/ASTWriterStmt.cpp
@@ -1646,6 +1646,7 @@
VisitExplicitCastExpr(E);
Record.AddSourceLocation(E->getBeginLoc());
Record.AddSourceLocation(E->getEndLoc());
+ Code = serialization::EXPR_BUILTIN_BIT_CAST;
}
void ASTStmtWriter::VisitUserDefinedLiteral(UserDefinedLiteral *E) {
Index: clang/lib/Serialization/ASTReaderStmt.cpp
===================================================================
--- clang/lib/Serialization/ASTReaderStmt.cpp
+++ clang/lib/Serialization/ASTReaderStmt.cpp
@@ -3606,6 +3606,11 @@
/*PathSize*/ Record[ASTStmtReader::NumExprFields]);
break;
+ case EXPR_BUILTIN_BIT_CAST:
+ assert(Record[ASTStmtReader::NumExprFields] == 0 && "Wrong PathSize!");
+ S = new (Context) BuiltinBitCastExpr(Empty);
+ break;
+
case EXPR_USER_DEFINED_LITERAL:
S = UserDefinedLiteral::CreateEmpty(
Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], Empty);
Index: clang/include/clang/Serialization/ASTBitCodes.h
===================================================================
--- clang/include/clang/Serialization/ASTBitCodes.h
+++ clang/include/clang/Serialization/ASTBitCodes.h
@@ -1797,6 +1797,9 @@
/// A CXXFunctionalCastExpr record.
EXPR_CXX_FUNCTIONAL_CAST,
+ /// A BuiltinBitCastExpr record.
+ EXPR_BUILTIN_BIT_CAST,
+
/// A UserDefinedLiteral record.
EXPR_USER_DEFINED_LITERAL,
Index: clang/include/clang/AST/ExprCXX.h
===================================================================
--- clang/include/clang/AST/ExprCXX.h
+++ clang/include/clang/AST/ExprCXX.h
@@ -4822,6 +4822,8 @@
: ExplicitCastExpr(BuiltinBitCastExprClass, T, VK, CK, SrcExpr, 0,
DstType),
KWLoc(KWLoc), RParenLoc(RParenLoc) {}
+ BuiltinBitCastExpr(EmptyShell Empty)
+ : ExplicitCastExpr(BuiltinBitCastExprClass, Empty, 0) {}
SourceLocation getBeginLoc() const LLVM_READONLY { return KWLoc; }
SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80360.269765.patch
Type: text/x-patch
Size: 2771 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200610/491e7fbd/attachment.bin>
More information about the cfe-commits
mailing list