[PATCH] D61838: [Sema] Suppress additional warnings for C's zero initializer

Peter Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu May 16 14:01:28 PDT 2019


Lekensteyn added a comment.

This looks reasonable to fix the problem at hand, but would it handle nested structures too?

  struct s1 {
     short f1;  // "int f1" is fine.
  };
  struct s2 {
     struct s1 f2;
     int x;
  };
  struct s3 {
     struct s2 f3;
     int x;
  };
  struct s2 x1 = {0};
  struct s3 x2 = {0};

produces this AST (`clang-check -ast-dump x.c --`):

  |-VarDecl 0x55e7bbc60390 <line:13:1, col:18> col:11 x1 'struct s2':'struct s2' cinit
  | `-InitListExpr 0x55e7bbc60498 <col:16, col:18> 'struct s2':'struct s2'
  |   |-InitListExpr 0x55e7bbc604e8 <col:17> 'struct s1':'struct s1'
  |   | `-ImplicitCastExpr 0x55e7bbc60530 <col:17> 'short' <IntegralCast>
  |   |   `-IntegerLiteral 0x55e7bbc60430 <col:17> 'int' 0
  |   `-ImplicitValueInitExpr 0x55e7bbc60548 <<invalid sloc>> 'int'
  |-VarDecl 0x55e7bbc605b0 <line:14:1, col:18> col:11 x2 'struct s3':'struct s3' cinit
  | `-InitListExpr 0x55e7bbc60678 <col:16, col:18> 'struct s3':'struct s3'
  |   |-InitListExpr 0x55e7bbc606c8 <col:17> 'struct s2':'struct s2'
  |   | |-InitListExpr 0x55e7bbc60718 <col:17> 'struct s1':'struct s1'
  |   | | `-ImplicitCastExpr 0x55e7bbc60760 <col:17> 'short' <IntegralCast>
  |   | |   `-IntegerLiteral 0x55e7bbc60610 <col:17> 'int' 0
  |   | `-ImplicitValueInitExpr 0x55e7bbc60778 <<invalid sloc>> 'int'
  |   `-ImplicitValueInitExpr 0x55e7bbc60788 <<invalid sloc>> 'int'


Repository:
  rC Clang

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

https://reviews.llvm.org/D61838





More information about the cfe-commits mailing list