On Aug 24, 2013, at 1:43 PM, Tobias Grosser <[email protected]> wrote:

On 08/24/2013 03:51 AM, Yaron Keren wrote:
Hello,

Attached is a patch I made to make clang warn where division of two integer
literals loses precision. For instance:

double x = 1/2;

Which results in x being 0. This is not the programmer's intention.
While experienced users will know to code 1.0/2 to force floating division,
new C/C++ programmers will fall in this trap.

The patch computes the reminder in the division operation and if only if it
is non-zero, warns and suggests a fix.

This is the first code I write for LLVM so please review it carefully.
Specifically, I was not sure whether to create another warning group
in DiagnosticSemaKinds.td or reuse an existing one. Maybe the group should
be renamed from "DivZero" to "DivProblems".

Wow. This seems really helpful!

As Matt suggested, please resubmit this patch to cfe-commits and add a test case.

+//
+  // check for integer constant division by integer constant

Also the comment seems misformatted. Remove the '//', start with an uppercase letter and finish the sentence with a point.

Also, here is an interesting test case that you may want to consider.

int foo(float b) {
float a = 1/2 + b;
}

Suggesting here to transform this into

int foo(float b) {
float a = 1.0/2 + b;
}

may not be what the user actually wants, as this promotes the whole _expression_ to 'double'. Possibly the following is more in line.

int foo(float b) {
float a = 1.0f/2 + b;
}

Cheers,
Tobias
_______________________________________________
llvm-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

This seems to have been forgotten, so I guess I’ll adopt it. This adds a test, fixes test failures and adds a new warning group for it. I haven’t yet been able to figure out how get the parent _expression_ to check if it’s a cast to float to add the f in the warning message.

Attachment: 0001-Add-warning-when-division-of-two-integer-literals-lo.patch
Description: Binary data

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to