diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index fee748bf9f9d..ab1496337210 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -12886,7 +12886,8 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) { AttributeCommonInfo::AS_Pragma)); } - if (var->hasInit() && isa(var->getInit())) { + if (!var->getType()->isStructureType() && var->hasInit() && + isa(var->getInit())) { const auto *ILE = cast(var->getInit()); unsigned NumInits = ILE->getNumInits(); if (NumInits > 2) @@ -12927,7 +12928,7 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) { Diag(SL->getBeginLoc(), diag::note_concatenated_string_literal_silence); } - // Warn just once. + // In any case, stop now. break; } } diff --git a/clang/test/Sema/string-concat.c b/clang/test/Sema/string-concat.c index b6bae9c95b0b..63abf100c020 100644 --- a/clang/test/Sema/string-concat.c +++ b/clang/test/Sema/string-concat.c @@ -148,6 +148,12 @@ const A not_warn6 = A{"", ""}; #endif +static A not_warn7 = {"", + + "" + "", + ""}; + // Do not warn when all the elements in the initializer are concatenated together. const char *all_elems_in_init_concatenated[] = {"a" "b" "c"};