Local label checks in integer_constant
authorAlan Modra <amodra@gmail.com>
Fri, 10 Feb 2023 07:33:35 +0000 (18:03 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 10 Feb 2023 07:37:49 +0000 (18:07 +1030)
"Local labels are never absolute" says the comment.  Except when they
are.  Testcase
 .offset
0:
 a=0b
I don't see any particular reason to disallow local labels inside
struct definitions, so delete the comment and assertions.

* expr.c (integer_constant): Delete local label assertions.

gas/expr.c

index 189236bec6d6cca1a3d96cc149834d376eda2ea4..78900b50e46fb5c40770a9880b714396194e7fd7 100644 (file)
@@ -573,10 +573,6 @@ integer_constant (int radix, expressionS *expressionP)
          symbolP = symbol_find (name);
          if ((symbolP != NULL) && (S_IS_DEFINED (symbolP)))
            {
-             /* Local labels are never absolute.  Don't waste time
-                checking absoluteness.  */
-             know (SEG_NORMAL (S_GET_SEGMENT (symbolP)));
-
              expressionP->X_op = O_symbol;
              expressionP->X_add_symbol = symbolP;
            }
@@ -604,11 +600,6 @@ integer_constant (int radix, expressionS *expressionP)
          name = fb_label_name (number, 1);
          symbolP = symbol_find_or_make (name);
          /* We have no need to check symbol properties.  */
-#ifndef many_segments
-         /* Since "know" puts its arg into a "string", we
-            can't have newlines in the argument.  */
-         know (S_GET_SEGMENT (symbolP) == undefined_section || S_GET_SEGMENT (symbolP) == text_section || S_GET_SEGMENT (symbolP) == data_section);
-#endif
          expressionP->X_op = O_symbol;
          expressionP->X_add_symbol = symbolP;
          expressionP->X_add_number = 0;