guopeilin added a comment.

Hi @hokein , I encounter a bug when clang parses enum and I have been recorded 
in https://bugs.llvm.org/show_bug.cgi?id=51554.
The source code like the following:

  enum E { e = E() };
  int main() {
    return 0;
  }

Some error message are expected like the following:

  test.cpp:1:14: error: invalid use of incomplete type 'E'
  enum E { e = E() };
               ^~~
  test.cpp:1:6: note: definition of 'E' is not complete until the closing '}'
  enum E { e = E() };

Also, I have made some analyses like the following:

  In ParseDecl.cpp:
  1. llvm-10: 
     AssignedVal.get(): NULL
     
  2. llvm-12(Context.getLangOpts().RecoveryASTType: default 
false)(early-version):
     AssignedVal.get(): RecoveryExpr 0xaaaaba19df20 '<dependent type>' 
contains-errors lvalue
     
  3. llvm-12(Context.getLangOpts().RecoveryASTType: default true) 
(latest-version, Finally crashed):
     AssignedVal.get()->dump(): RecoveryExpr 0xaaaabb4d9500 'enum E' 
contains-errors
     
  In CheckEnumConstant(), EltTy(type: QualType, value: EnumType 0xaaaabb517dd0 
'enum E') cannot use getIntWidth(), so crashed. But the code doesn't seem to be 
wrong around here. 

Could you please have a look at this issue? Thanks a lot.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82657/new/

https://reviews.llvm.org/D82657

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to