labrinea added inline comments.

================
Comment at: lib/Basic/Targets.cpp:5407
+      Builder.defineMacro("__ARM_SIZEOF_MINIMAL_ENUM",
+                          Opts.ShortEnums || Opts.ABIEnums ? "1" : "4");
 
----------------
rengolin wrote:
> Isn't ABIEnums 4? Shouldn't this be:
> 
>     Opts.ShortEnums || !Opts.ABIEnums
> 
> Is it even valid to have ABIEnums && ShortEnums at the same time?
My understanding is that ABIEnums requires 32-bit enums across an ABI-complying 
interface, but allows short enums outside of it. Therefore 
__ARM_SIZEOF_MINIMAL_ENUM could be any of 1 or 4.

ABIEnums && ShortEnums cannot be both set at the same time.


================
Comment at: lib/Driver/Tools.cpp:5731
+
+  // The last of -fno-enums, -fshort-enums, -fabi-enums wins.
+  Arg *Enum;
----------------
rengolin wrote:
> If this is true, why go the extra complexity of mapping all possible states? 
> Why not just use one line:
> 
>     Enum = Args.getLastArg(options::OPT_fno_enums, options::OPT_fshort_enums, 
> options::OPT_fabi_enums);
> 
> and be done with it? Short and ABI are not compatible, it's either one or the 
> other.
I don't like this complicated logic either but it can handle cases like:
-fshort-enums -fno-enums -fabi-enums -fno-abi-enums
where -fno-enums should win. I've added a test for this sequence 
(test/Driver/clang_f_opts.c, line 459)
The suggested logic would ignore '-fno-abi-enums', which is the last argument. 
If we are happy with rejecting all the preceding flags and keeping just the 
last one this would work:
```
Args.getLastArg(options::OPT_fno_enums, options::OPT_fshort_enums, 
options::OPT_fno_short_enums,
                options::OPT_fabi_enums, options::OPT_fno_abi_enums);
```
Alternatively an equally ugly logic that handles complicated sequences is:
```
if (Arg *Enum = Args.getLastArg(options::OPT_fno_enums,
             ShortEnums ? options::OPT_fshort_enums : options::OPT_INVALID,
               ABIEnums ? options::OPT_fabi_enums   : options::OPT_INVALID)) {
```


https://reviews.llvm.org/D26968



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to