arphaman added a comment.

Thanks for working on this! I have a couple of comments:



================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:1762
 def err_init_incomplete_type : Error<"initialization of incomplete type %0">;
+def err_list_init_in_parens : Error<"list-initializer for non-class type "
+  "must not be parenthesized">;
----------------
Wouldn't it be better if we had a diagnostic with the type information? So, 
instead of showing `list-initializer for non-class type must not be 
parenthesized` clang would show `list-initializer for non-class type 'int' must 
not be parenthesized`. What do you think?

As well as that, it seems that GCC issues a warning instead of an error for 
this diagnostic, so should this be a warning in clang as well?


================
Comment at: include/clang/Sema/Sema.h:1802
   void ActOnInitializerError(Decl *Dcl);
+  bool cannotBeInitializededByParenthzedList(QualType TargetType);
   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
----------------
I think you mean `parenthesized` instead of `parenthzed` here. As well as that, 
I think that it would be better to use a name without the `not`, something like 
`canInitializeWithParenthesizedList`.

Also, please add a comment that explains what this method does.


================
Comment at: include/clang/Sema/Sema.h:1803
+  bool cannotBeInitializededByParenthzedList(QualType TargetType);
   void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
   void ActOnCXXForRangeDecl(Decl *D);
----------------
Please add a blank line here to separate unrelated `Act...` methods from the 
new method.


================
Comment at: lib/Sema/SemaDecl.cpp:9796
+        Diag(VDecl->getLocation(), diag::err_list_init_in_parens)
+          << CXXDirectInit->getSourceRange()
+          << FixItHint::CreateRemoval(CXXDirectInit->getLocStart())
----------------
Slight formatting issue: please indent the three lines that start with '<<' 
using 4 extra spaces instead of 2  (just like you did in your changes for 
SemaExprCXX.cpp).


================
Comment at: lib/Sema/SemaDecl.cpp:10110
+bool Sema::cannotBeInitializededByParenthzedList(QualType TargetType) {
+  return !TargetType->isDependentType() && !TargetType->isRecordType() &&
+         !TargetType->getContainedAutoType();
----------------
If you change the name as I suggested to something like 
`canInitializeWithParenthesizedList` then the logic here would have to be 
inverted: `TargetType()->isDependentType() || TargetType()->isRecordType() || 
TargetType()->getContainedAutoType()`. Consequently, the call sites will have 
to be updated to include a `!` before the call.


================
Comment at: lib/Sema/SemaExprCXX.cpp:1229
+      Diag(TInfo->getTypeLoc().getLocStart(), diag::err_list_init_in_parens)
+          << IList->getSourceRange()
+          << FixItHint::CreateRemoval(LParenLoc)
----------------
Formatting issue: clang-format replaces

```
          << IList->getSourceRange()
          << FixItHint::CreateRemoval(LParenLoc)
```
with
```
          << IList->getSourceRange() << FixItHint::CreateRemoval(LParenLoc)
```


================
Comment at: test/SemaCXX/cxx0x-initializer-scalars.cpp:96
+    (void) int({0}); // expected-error {{list-initializer for non-class type 
must not be parenthesized}}
+    new int({0});  // expected-error {{list-initializer for non-class type 
must not be parenthesized}}
   }
----------------
Please add a test case for a pointer type as well, something like this should 
work:
```
int *x({0});
```
As well as that, please add a test for a dependent type.


https://reviews.llvm.org/D25816



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

Reply via email to