evansmal updated this revision to Diff 487443. evansmal added a comment. Improve specificity of the diagnostic message.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D141283/new/ https://reviews.llvm.org/D141283 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/Sema/SemaInit.cpp clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp Index: clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp =================================================================== --- clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp +++ clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp @@ -1,2 +1,2 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -char test1[1]="f"; // expected-error {{initializer-string for char array is too long}} +char test1[1]="f"; // expected-error {{initializer-string for char array is too long, array size is 1 but initializer has size 2 (including the null terminating character)}} Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -239,6 +239,8 @@ if (StrLength > CAT->getSize().getZExtValue()) S.Diag(Str->getBeginLoc(), diag::err_initializer_string_for_char_array_too_long) + << CAT->getSize().getZExtValue() + << StrLength << Str->getSourceRange(); } else { // C99 6.7.8p14. Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -5953,7 +5953,7 @@ "excess elements in char array initializer">, InGroup<ExcessInitializers>; def err_initializer_string_for_char_array_too_long : Error< - "initializer-string for char array is too long">; + "initializer-string for char array is too long, array size is %0 but initializer has size %1 (including the null terminating character)">; def ext_initializer_string_for_char_array_too_long : ExtWarn< "initializer-string for char array is too long">, InGroup<ExcessInitializers>;
Index: clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp =================================================================== --- clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp +++ clang/test/CXX/dcl.decl/dcl.init/dcl.init.string/p2.cpp @@ -1,2 +1,2 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -char test1[1]="f"; // expected-error {{initializer-string for char array is too long}} +char test1[1]="f"; // expected-error {{initializer-string for char array is too long, array size is 1 but initializer has size 2 (including the null terminating character)}} Index: clang/lib/Sema/SemaInit.cpp =================================================================== --- clang/lib/Sema/SemaInit.cpp +++ clang/lib/Sema/SemaInit.cpp @@ -239,6 +239,8 @@ if (StrLength > CAT->getSize().getZExtValue()) S.Diag(Str->getBeginLoc(), diag::err_initializer_string_for_char_array_too_long) + << CAT->getSize().getZExtValue() + << StrLength << Str->getSourceRange(); } else { // C99 6.7.8p14. Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -5953,7 +5953,7 @@ "excess elements in char array initializer">, InGroup<ExcessInitializers>; def err_initializer_string_for_char_array_too_long : Error< - "initializer-string for char array is too long">; + "initializer-string for char array is too long, array size is %0 but initializer has size %1 (including the null terminating character)">; def ext_initializer_string_for_char_array_too_long : ExtWarn< "initializer-string for char array is too long">, InGroup<ExcessInitializers>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits