[PATCH] D72756: [LLD][ELF] Add support for INPUT_SECTION_FLAGS
    George Rimar via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Sun Jan 19 12:21:17 PST 2020
    
    
  
grimar accepted this revision.
grimar added a comment.
I've put a few suggestions, but generally this LGTM. Thanks!
================
Comment at: lld/ELF/ScriptParser.cpp:804
+      std::tie(withFlags, withoutFlags) = readInputSectionFlags();
+      tok = next();
+    }
----------------
grimar wrote:
> grimar wrote:
> > The same.
> And here.
This comment was missed. Here you can inline the `next()` call too:
```
    if (consume("INPUT_SECTION_FLAGS"))
      std::tie(withFlags, withoutFlags) = readInputSectionFlags();
    cmd->sectionCommands.push_back(
        readInputSectionRules(next(), withFlags, withoutFlags));
```
This is what original code did, btw.
================
Comment at: lld/ELF/ScriptParser.cpp:712
+    InputSectionDescription *cmd =
+        readInputSectionRules(tok, withFlags, withoutFlags);
     expect(")");
----------------
peter.smith wrote:
> grimar wrote:
> > I think you can now get rid of `tok = next();`:
> > 
> > ```
> > InputSectionDescription *cmd =
> >   readInputSectionRules(next(), withFlags, withoutFlags);
> > ```
> I don't think I can, that line is the same as line 699 in the diff on the left hand side.
> 
> ```
>     StringRef filePattern = next();
>     if (consume("INPUT_SECTION_FLAGS"))
> ```
> I think I can rename tok to filePattern though.
Not sure I understand why there can be any problems with the following code?
```
   if (consume("INPUT_SECTION_FLAGS"))
      std::tie(withFlags, withoutFlags) = readInputSectionFlags();
    InputSectionDescription *cmd =
        readInputSectionRules(next(), withFlags, withoutFlags);
```
(I tried and it works)
You do not use `tok` below the `readInputSectionRules` anyways.
The original code had the `StringRef filePattern` variable.
I am not sure how much useful to have it,
but at least it named the token somehow.
But in the following version
```
    tok = next();
    InputSectionDescription *cmd =
        readInputSectionRules(tok, withFlags, withoutFlags);
```
I do not see why it might be useful to do `tok = next();` and not just inline the `next()`?
So I'd suggest to write in one of the following ways:
```
   if (consume("INPUT_SECTION_FLAGS"))
      std::tie(withFlags, withoutFlags) = readInputSectionFlags();
    InputSectionDescription *cmd =
        readInputSectionRules(next(), withFlags, withoutFlags);
```
or stick to the original code:
```
    if (consume("INPUT_SECTION_FLAGS"))
      std::tie(withFlags, withoutFlags) = readInputSectionFlags();
    StringRef filePattern = next();
    InputSectionDescription *cmd =
        readInputSectionRules(filePattern, withFlags, withoutFlags);
```
================
Comment at: lld/ELF/ScriptParser.cpp:720
+  }
+  return readInputSectionRules(tok, withFlags, withoutFlags);
 }
----------------
I'd suggest to early return in the "INPUT_SECTION_FLAGS" branch just like we do in the "KEEP" branch.
It seems probably a bit simpler to exit early here too?
```
  if (tok == "INPUT_SECTION_FLAGS") {
    std::tie(withFlags, withoutFlags) = readInputSectionFlags();
    return readInputSectionRules(next(), withFlags, withoutFlags);
  }
  return readInputSectionRules(tok, withFlags, withoutFlags);
```
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72756/new/
https://reviews.llvm.org/D72756
    
    
More information about the llvm-commits
mailing list