[PATCH] D50050: [AST] CastExpr: BasePathSize is not large enough.

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 31 06:09:50 PDT 2018

erichkeane added a comment.

Its not that it needs to be 'at least 9 bits', IMO 9 bits was too small as well.

What I'd prefer to this solution is similar to what John McCall said on PR38356: Add the size to the trailing allocated space.  Check out the 'create' methods for all of these, and make the first sizeof(void*) bytes be the size.  I'd also suggest using 1 bit in CastExprBits to be a 'is base path empty', so that you don't have to allocate for it at all.

Comment at: include/clang/AST/Expr.h:2796
+  unsigned BasePathSize : 14;
   bool CastConsistency() const;
The comment there is wrong.  It was wrong at 9 bits as well, since it cannot handle our implimits.  I'd like to see if you can find where the implimit for direct/indirect bases is stored, and write a static-assert for it here.

Comment at: test/CodeGenCXX/castexpr-basepathsize-threshold.cpp:1
+// RUN: %clang_cc1 %s -emit-llvm -o -
First, most of this test can be further simplified.  Second, I'd like to see a test that actually tests the limit without hitting the recursive template limit.

Comment at: test/CodeGenCXX/castexpr-basepathsize-threshold.cpp:20
+  // not fit it, so we are testing that we do fit it.
+  // If -ftemplate-depth= is provided, larger values (4096 and up) cause crashes
+  // elsewhere.
Shouldn't we cover 16k?  

  rC Clang


More information about the cfe-commits mailing list