nathanchance wrote:

For what it's worth, this causes `-Wstring-concatenation` to pop up a few times 
in the Linux kernel. Two of the instances are simple enough to resolve under 
the kernel's "Do not split user visible strings regardless of length" rule.

```
drivers/scsi/lpfc/lpfc_attr.c:76:3: warning: suspicious concatenation of string 
literals in an array initialization; did you mean to separate the elements with 
a comma? [-Wstring-concatenation]
   75 |         "link negotiated speed does not match existing"
      |
      |                                                        ,
   76 |                 " trunk - link was \"high\" speed",
      |                 ^
drivers/scsi/lpfc/lpfc_attr.c:75:2: note: place parentheses around the string 
literal to silence warning
   75 |         "link negotiated speed does not match existing"
      |         ^
```

```c
const char *const trunk_errmsg[] = {    /* map errcode */
    "", /* There is no such error code at index 0*/
    "link negotiated speed does not match existing"
        " trunk - link was \"low\" speed",
    "link negotiated speed does not match"
        " existing trunk - link was \"middle\" speed",
    "link negotiated speed does not match existing"
        " trunk - link was \"high\" speed",
    "Attached to non-trunking port - F_Port",
    "Attached to non-trunking port - N_Port",
    "FLOGI response timeout",
    "non-FLOGI frame received",
    "Invalid FLOGI response",
    "Trunking initialization protocol",
    "Trunk peer device mismatch",
};
```

```diff
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 33582d48ec09..433cddcae4b6 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -68,12 +68,9 @@

 const char *const trunk_errmsg[] = {   /* map errcode */
        "",     /* There is no such error code at index 0*/
-       "link negotiated speed does not match existing"
-               " trunk - link was \"low\" speed",
-       "link negotiated speed does not match"
-               " existing trunk - link was \"middle\" speed",
-       "link negotiated speed does not match existing"
-               " trunk - link was \"high\" speed",
+       "link negotiated speed does not match existing trunk - link was \"low\" 
speed",
+       "link negotiated speed does not match existing trunk - link was 
\"middle\" speed",
+       "link negotiated speed does not match existing trunk - link was 
\"high\" speed",
        "Attached to non-trunking port - F_Port",
        "Attached to non-trunking port - N_Port",
        "FLOGI response timeout",
```

```
drivers/edac/i7300_edac.c:197:9: warning: suspicious concatenation of string 
literals in an array initialization; did you mean to separate the elements with 
a comma? [-Wstring-concatenation]
  196 |         [0]  = "Memory Write error on non-redundant retry or "
      |
      |                                                               ,
  197 |                "FBD configuration Write error on retry",
      |                ^
drivers/edac/i7300_edac.c:196:9: note: place parentheses around the string 
literal to silence warning
  196 |         [0]  = "Memory Write error on non-redundant retry or "
      |                ^
```

```c
static const char *ferr_fat_fbd_name[] = {
    [22] = "Non-Redundant Fast Reset Timeout",
    [2]  = ">Tmid Thermal event with intelligent throttling disabled",
    [1]  = "Memory or FBD configuration CRC read error",
    [0]  = "Memory Write error on non-redundant retry or "
           "FBD configuration Write error on retry",
};
```

```diff
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c
index 69068f8d0cad..939b855e8fbf 100644
--- a/drivers/edac/i7300_edac.c
+++ b/drivers/edac/i7300_edac.c
@@ -193,8 +193,7 @@ static const char *ferr_fat_fbd_name[] = {
        [22] = "Non-Redundant Fast Reset Timeout",
        [2]  = ">Tmid Thermal event with intelligent throttling disabled",
        [1]  = "Memory or FBD configuration CRC read error",
-       [0]  = "Memory Write error on non-redundant retry or "
-              "FBD configuration Write error on retry",
+       [0]  = "Memory Write error on non-redundant retry or FBD configuration 
Write error on retry",
 };
 #define GET_FBD_FAT_IDX(fbderr)        (((fbderr) >> 28) & 3)
 #define FERR_FAT_FBD_ERR_MASK ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 22))
```

However, this third one is a little interesting because the warning happens on 
the last instance of a sequence of multi-line concatenations:

```
drivers/net/dsa/sja1105/sja1105_static_config.c:991:3: warning: suspicious 
concatenation of string literals in an array initialization; did you mean to 
separate the elements with a comma? [-Wstring-concatenation]
  990 |                 "vl-lookup-table present, but one of vl-policing-table, 
"
      |
      |                                                                         
 ,
  991 |                 "vl-forwarding-table or vl-forwarding-parameters-table 
is empty",
      |                 ^
drivers/net/dsa/sja1105/sja1105_static_config.c:990:3: note: place parentheses 
around the string literal to silence warning
  990 |                 "vl-lookup-table present, but one of vl-policing-table, 
"
      |                 ^
```

```c
const char *sja1105_static_config_error_msg[] = {
    [SJA1105_CONFIG_OK] = "",
    [SJA1105_TTETHERNET_NOT_SUPPORTED] =
        "schedule-table present, but TTEthernet is "
        "only supported on T and Q/S",
    [SJA1105_INCORRECT_TTETHERNET_CONFIGURATION] =
        "schedule-table present, but one of "
        "schedule-entry-points-table, schedule-parameters-table or "
        "schedule-entry-points-parameters table is empty",
    [SJA1105_INCORRECT_VIRTUAL_LINK_CONFIGURATION] =
        "vl-lookup-table present, but one of vl-policing-table, "
        "vl-forwarding-table or vl-forwarding-parameters-table is empty",
    [SJA1105_MISSING_L2_POLICING_TABLE] =
        "l2-policing-table needs to have at least one entry",
    [SJA1105_MISSING_L2_FORWARDING_TABLE] =
        "l2-forwarding-table is either missing or incomplete",
    [SJA1105_MISSING_L2_FORWARDING_PARAMS_TABLE] =
        "l2-forwarding-parameters-table is missing",
    [SJA1105_MISSING_GENERAL_PARAMS_TABLE] =
        "general-parameters-table is missing",
    [SJA1105_MISSING_VLAN_TABLE] =
        "vlan-lookup-table needs to have at least the default untagged VLAN",
    [SJA1105_MISSING_XMII_TABLE] =
        "xmii-table is missing",
    [SJA1105_MISSING_MAC_TABLE] =
        "mac-configuration-table needs to contain an entry for each port",
    [SJA1105_OVERCOMMITTED_FRAME_MEMORY] =
        "Not allowed to overcommit frame memory. L2 memory partitions "
        "and VL memory partitions share the same space. The sum of all "
        "16 memory partitions is not allowed to be larger than 929 "
        "128-byte blocks (or 910 with retagging). Please adjust "
        "l2-forwarding-parameters-table.part_spc and/or "
        "vl-forwarding-parameters-table.partspc.",
};
```

I will probably suggest fixing it like so just to be consistent but I am sure 
someone will ask why it only flags the third instance and none of the others (I 
realize because of the heuristic but still).

```diff
diff --git a/drivers/net/dsa/sja1105/sja1105_static_config.c 
b/drivers/net/dsa/sja1105/sja1105_static_config.c
index ffece8a400a6..45564b62ce41 100644
--- a/drivers/net/dsa/sja1105/sja1105_static_config.c
+++ b/drivers/net/dsa/sja1105/sja1105_static_config.c
@@ -980,15 +980,15 @@ static u64 blk_id_map[BLK_IDX_MAX] = {
 const char *sja1105_static_config_error_msg[] = {
        [SJA1105_CONFIG_OK] = "",
        [SJA1105_TTETHERNET_NOT_SUPPORTED] =
-               "schedule-table present, but TTEthernet is "
-               "only supported on T and Q/S",
+               ("schedule-table present, but TTEthernet is "
+               "only supported on T and Q/S"),
        [SJA1105_INCORRECT_TTETHERNET_CONFIGURATION] =
-               "schedule-table present, but one of "
+               ("schedule-table present, but one of "
                "schedule-entry-points-table, schedule-parameters-table or "
-               "schedule-entry-points-parameters table is empty",
+               "schedule-entry-points-parameters table is empty"),
        [SJA1105_INCORRECT_VIRTUAL_LINK_CONFIGURATION] =
-               "vl-lookup-table present, but one of vl-policing-table, "
-               "vl-forwarding-table or vl-forwarding-parameters-table is 
empty",
+               ("vl-lookup-table present, but one of vl-policing-table, "
+               "vl-forwarding-table or vl-forwarding-parameters-table is 
empty"),
        [SJA1105_MISSING_L2_POLICING_TABLE] =
                "l2-policing-table needs to have at least one entry",
        [SJA1105_MISSING_L2_FORWARDING_TABLE] =
@@ -1004,12 +1004,12 @@ const char *sja1105_static_config_error_msg[] = {
        [SJA1105_MISSING_MAC_TABLE] =
                "mac-configuration-table needs to contain an entry for each 
port",
        [SJA1105_OVERCOMMITTED_FRAME_MEMORY] =
-               "Not allowed to overcommit frame memory. L2 memory partitions "
+               ("Not allowed to overcommit frame memory. L2 memory partitions "
                "and VL memory partitions share the same space. The sum of all "
                "16 memory partitions is not allowed to be larger than 929 "
                "128-byte blocks (or 910 with retagging). Please adjust "
                "l2-forwarding-parameters-table.part_spc and/or "
-               "vl-forwarding-parameters-table.partspc.",
+               "vl-forwarding-parameters-table.partspc."),
 };

 static sja1105_config_valid_t
```

Maybe this warning could take into account using designators probably means the 
concatenation is intentional? Not sure if that is possible.

https://github.com/llvm/llvm-project/pull/154018
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to