yronglin updated this revision to Diff 539152. yronglin added a comment. Address John's comment.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D154784/new/ https://reviews.llvm.org/D154784 Files: clang/docs/ReleaseNotes.rst clang/include/clang/AST/Stmt.h clang/test/SemaCXX/builtin-dump-struct.cpp Index: clang/test/SemaCXX/builtin-dump-struct.cpp =================================================================== --- clang/test/SemaCXX/builtin-dump-struct.cpp +++ clang/test/SemaCXX/builtin-dump-struct.cpp @@ -159,3 +159,28 @@ // expected-note@#Format {{no known conversion from 'int' to 'ConstexprString &' for 1st argument}} } #endif + +// Check that PseudoObjectExprBitfields:NumSubExprs doesn't overflow. This +// would previously cause a crash. +struct t1 { + int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, + v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, + v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, + v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, + v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, + v92, v93, v94, v95, v96, v97, v98, v99; +}; + +struct t2 { + t1 v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, + v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, + v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, + v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, + v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, + v92, v93, v94, v95, v96, v97, v98, v99; +}; + +int printf(const char *, ...); +void f1(t2 w) { __builtin_dump_struct(&w, printf); } Index: clang/include/clang/AST/Stmt.h =================================================================== --- clang/include/clang/AST/Stmt.h +++ clang/include/clang/AST/Stmt.h @@ -595,8 +595,8 @@ // These don't need to be particularly wide, because they're // strictly limited by the forms of expressions we permit. - unsigned NumSubExprs : 8; - unsigned ResultIndex : 32 - 8 - NumExprBits; + unsigned NumSubExprs : 16; + unsigned ResultIndex : 16; }; class SourceLocExprBitfields { Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -582,6 +582,8 @@ (`#50243 <https://github.com/llvm/llvm-project/issues/50243>`_), (`#48636 <https://github.com/llvm/llvm-project/issues/48636>`_), (`#50320 <https://github.com/llvm/llvm-project/issues/50320>`_). +- Fix crash caused by PseudoObjectExprBitfields: NumSubExprs overflow. + (`#63169 <https://github.com/llvm/llvm-project/issues/63169>_`) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index: clang/test/SemaCXX/builtin-dump-struct.cpp =================================================================== --- clang/test/SemaCXX/builtin-dump-struct.cpp +++ clang/test/SemaCXX/builtin-dump-struct.cpp @@ -159,3 +159,28 @@ // expected-note@#Format {{no known conversion from 'int' to 'ConstexprString &' for 1st argument}} } #endif + +// Check that PseudoObjectExprBitfields:NumSubExprs doesn't overflow. This +// would previously cause a crash. +struct t1 { + int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, + v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, + v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, + v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, + v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, + v92, v93, v94, v95, v96, v97, v98, v99; +}; + +struct t2 { + t1 v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, + v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, + v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, + v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, + v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, + v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, + v92, v93, v94, v95, v96, v97, v98, v99; +}; + +int printf(const char *, ...); +void f1(t2 w) { __builtin_dump_struct(&w, printf); } Index: clang/include/clang/AST/Stmt.h =================================================================== --- clang/include/clang/AST/Stmt.h +++ clang/include/clang/AST/Stmt.h @@ -595,8 +595,8 @@ // These don't need to be particularly wide, because they're // strictly limited by the forms of expressions we permit. - unsigned NumSubExprs : 8; - unsigned ResultIndex : 32 - 8 - NumExprBits; + unsigned NumSubExprs : 16; + unsigned ResultIndex : 16; }; class SourceLocExprBitfields { Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -582,6 +582,8 @@ (`#50243 <https://github.com/llvm/llvm-project/issues/50243>`_), (`#48636 <https://github.com/llvm/llvm-project/issues/48636>`_), (`#50320 <https://github.com/llvm/llvm-project/issues/50320>`_). +- Fix crash caused by PseudoObjectExprBitfields: NumSubExprs overflow. + (`#63169 <https://github.com/llvm/llvm-project/issues/63169>_`) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits