diff options
Diffstat (limited to 'compilerplugins/clang')
-rw-r--r-- | compilerplugins/clang/intvsfloat.cxx (renamed from compilerplugins/clang/store/intvsfloat.cxx) | 6 | ||||
-rw-r--r-- | compilerplugins/clang/test/intvsfloat.cxx | 43 |
2 files changed, 21 insertions, 28 deletions
diff --git a/compilerplugins/clang/store/intvsfloat.cxx b/compilerplugins/clang/intvsfloat.cxx index 3189d982d9c0..e9ee3fa9b306 100644 --- a/compilerplugins/clang/store/intvsfloat.cxx +++ b/compilerplugins/clang/intvsfloat.cxx @@ -16,9 +16,7 @@ TODO multiplying/otherop on a combination of a float and int, and then truncating to int. like this: float getRotation() {} - int moRotation; - moRotation = -F_PI180 * 90 * getRotation(); - + int moRotation = -F_PI180 * 90 * getRotation(); */ namespace { @@ -90,6 +88,8 @@ llvm::Optional<double> IntVsFloat::getExprValue(Expr const* expr) // Of the available clang Evaluate* APIs, this is the __only__ one that produces useful output // (as of 17 Aug 2018 checkout of clang, ie. towards clang 7) + if (expr->isValueDependent()) + return llvm::Optional<double>(); Expr::EvalResult evalResult; if (!expr->EvaluateAsRValue(evalResult, compiler.getASTContext())) return llvm::Optional<double>(); diff --git a/compilerplugins/clang/test/intvsfloat.cxx b/compilerplugins/clang/test/intvsfloat.cxx index 7c753c3667ab..4746873e7bba 100644 --- a/compilerplugins/clang/test/intvsfloat.cxx +++ b/compilerplugins/clang/test/intvsfloat.cxx @@ -18,26 +18,22 @@ struct Class1 void func1(Class1 const& class1) { - if (1 - == PI) // expected-error {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + // expected-error@+1 {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + if (1 == PI) return; - if (1 - == class1 - .PI) // expected-error {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + // expected-error@+1 {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + if (1 == class1.PI) return; - if (true - == class1 - .PI) // expected-error {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + // expected-error@+1 {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + if (true == class1.PI) return; if (1 == class1.getInt()) // no warning expected return; - if (1 - == class1 - .E()) // expected-error {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + // expected-error@+1 {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + if (1 == class1.E()) return; - if (true - == class1 - .E()) // expected-error {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + // expected-error@+1 {{comparing integer to float constant, can never be true [loplugin:intvsfloat]}} + if (true == class1.E()) return; if (1 == class1.getFloat()) // no warning expected return; @@ -45,24 +41,21 @@ void func1(Class1 const& class1) void func2(Class1 const& class1) { - int i0 - = PI; // expected-error {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + // expected-error@+1 {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + int i0 = PI; (void)i0; - int i1 - = class1 - .PI; // expected-error {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + // expected-error@+1 {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + int i1 = class1.PI; (void)i1; - int i2 - = class1 - .E(); // expected-error {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + // expected-error@+1 {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + int i2 = class1.E(); (void)i2; int i3 = class1.getFloat(); // no warning expected (void)i3; int i4 = class1.getInt(); // no warning expected (void)i4; - bool b1 - = class1 - .E(); // expected-error {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + // expected-error@+1 {{assigning constant float value to int truncates data [loplugin:intvsfloat]}} + bool b1 = class1.E(); (void)b1; } |