On 02/03/15 20:03, Jason Ekstrand wrote:


On Mon, Mar 2, 2015 at 8:02 AM, Jose Fonseca <jfons...@vmware.com
<mailto:jfons...@vmware.com>> wrote:

    On 27/02/15 16:15, Brian Paul wrote:

        On 02/27/2015 09:10 AM, Ian Romanick wrote:

            On 02/26/2015 10:07 AM, Brian Paul wrote:

                On 02/26/2015 09:51 AM, Jose Fonseca wrote:

[...]

            It occurs to me that this may be the only reasonable
            use-case in all
            history of memset returning the pointer that you pass to it:

                  unsigned *work = memset(alloca(work_size), 0, work_size);


        That's cool!


    Yes, indeed, that can save another source line.


    FWIW, I also tried to prototype a few macros for dealing with VLAs:

    http://cgit.freedesktop.org/~__jrfonseca/mesa/commit/?h=nir-__vla
    
<https://urldefense.proofpoint.com/v2/url?u=http-3A__cgit.freedesktop.org_-7Ejrfonseca_mesa_commit_-3Fh-3Dnir-2Dvla&d=AwMFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=GcBQbNm0KBs2XIKN1fx-lDFftq6SDUMPhaSl0l9qLqs&s=J8rc6LjrrcurIGknA42ShkJEmizswzfrcexlCzrWdRs&e=>

    On one hand, they save quite a bit of typing, even compared with
    vanilla C99 VLAs.  On the other hand, being macros it's always a bit
    magical and tricky to read..


I'm OK with the macro magic.  I have two qualms, however.  First, I'm
not sure I like the fact that it defines a second size variable behind
your back.  Second, I'd like to keep it to one line if we can and
require the user to provide the semicolon.  Since we already have the
type from the user, this shouldn't be hard as we can do

_type *_name = alloca((_length) * sizeof(_type))

Then we don't have to worry about when the variable is declared vs. when
the sizeof happens.

Sure. I've just posted a review request that does this.

A semi-colon is already required (I was only using semi-colon for all but the last statements), but with the Ian's memset trick we can indeed squeeze everything into a single statement.

The only drawback of not declaring an additional variable with the size is that we'll need to evaluate the size twice for VLA_FILL/ZERO variants, therefore care must be taken to never use expressions with side effects (+=, ++, --, funcions, etc).

> Also, hiding it in a macro means that we could do

_type _name[_length]

for GCC/clang builds if we wanted to.

I also thought about it, but unfortunately that would prevent using -Werror=vla, and therefore prevent catching instances where people might inadvertently use VLA directly without these macros.

But at least having these macro means, when one day MSVC supports VLA, it's trivial to refactor the code to use them.

Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to