On 16-12-2011 13:23, bearophile wrote:
There are the videos of the 2011 LLVM Developer Meeting:
http://www.youtube.com/playlist?list=PL970A5BD02C11F80C

Slides too:
http://llvm.org/devmtg/2011-11/

As usual the LLVM talks are quite interesting. I have started to see the 
videos/slides, it will require some time.

An interesting talk, "Using clang in the Chromium project":
http://www.youtube.com/watch?v=IvL3f8xY7Uw

Slides:
http://llvm.org/devmtg/2011-11/Weber_Wennborg_UsingClangInChromium.pdf

-----------------------------------

It shows some problems found by Clang.


a.cc:2:9: warning: using the result of an assignment as a condition without 
parentheses [-Wparentheses]
   if (x |= y)
       ~~^~~~
a.cc:2:9: note: use '!=' to turn this compound assignment into an inequality 
comparison
   if (x |= y)
         ^~
         !=

1 warning generated.



This code doesn't compile with DMD:
Error: assignment cannot be used as a condition, perhaps == was meant?

void main() {
     int x, y;
     if (x = y) {}
}


But this gives no errors:

void main() {
     int x, y;
     if (x |= y) {}
     if (x += y) {}
}


Do you know why DMD forbids assignments as conditions, but it accepts compound 
assignments there? It looks like a incongruence that's better to remove.

-----------------------------------

10.25 in the video:

a.cc:2:16: warning: operator '?:' has lower precedence than '+'; '+' will be 
evaluated first
   return x + b ? y : 0;
          ~~~~~ ^
a.cc:2:16: note: place parentheses around the '?:' expression to evaluate it 
first
   return x + b ? y : 0;
                ^
             (         )

1 warning generated.

They say:

It's a bug every time!


Given the frequence of bugs caused by the ?: operator, I think something like 
this will be good to have in D too.

-----------------------------------

a.cc:8:23: warning: argument to ’sizeof’ in ’memset’ call is the same 
expression as the destination;
   did you mean to dereference it?
   memset(s, 0, sizeof(s));
          ~            ^

1 warning generated.

-----------------------------------

At 14.45-16.39 there is an interesting part, about slide 22 of the PDF. It's 
about crashes/bugs caused by undefined order of evaluation of function 
arguments. This is a class of bugs that don't have to happen in D2 code.

Bye,
bearophile

I generally don't like that a compiler throws warnings at me for perfectly valid code. Yes, it *can* be error prone, but most often, I know what I'm doing and am actually utilizing a language feature. Personally, I'd make no warnings the default and add an option that looks for suspicious stuff like if (a = b).

- Alex

Reply via email to