]> granicus.if.org Git - clang/commitdiff
PR11002: Make sure we emit sentinel warnings with a valid source location. (Ideally...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 27 Sep 2011 23:46:37 +0000 (23:46 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 27 Sep 2011 23:46:37 +0000 (23:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140658 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/Sema/attr-sentinel.c

index 25f1342aeb08d0c724ce9cf2bfedb95b4ed91142..2b67b4dc486ead79f58df016852e44a274b1f072 100644 (file)
@@ -252,10 +252,13 @@ void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
     NullValue = "NULL";
   else
     NullValue = "(void*) 0";
-  
-  Diag(MissingNilLoc, diag::warn_missing_sentinel) 
-    << calleeType
-    << FixItHint::CreateInsertion(MissingNilLoc, ", " + NullValue);
+
+  if (MissingNilLoc.isInvalid())
+    Diag(Loc, diag::warn_missing_sentinel) << calleeType;
+  else
+    Diag(MissingNilLoc, diag::warn_missing_sentinel) 
+      << calleeType
+      << FixItHint::CreateInsertion(MissingNilLoc, ", " + NullValue);
   Diag(D->getLocation(), diag::note_sentinel_here) << calleeType;
 }
 
index 5ca6a8d0011360bd7ff89bb85ad3ad4aa86d863c..abc108fdc7858d4ba4341bee133254e31e4e11ba 100644 (file)
@@ -4,13 +4,15 @@
 
 #define ATTR __attribute__ ((__sentinel__)) 
 
-void foo1 (int x, ...) ATTR; // expected-note 2 {{function has been explicitly marked sentinel here}}
+void foo1 (int x, ...) ATTR; // expected-note 3 {{function has been explicitly marked sentinel here}}
 void foo5 (int x, ...) __attribute__ ((__sentinel__(1))); // expected-note {{function has been explicitly marked sentinel here}}
 void foo6 (int x, ...) __attribute__ ((__sentinel__(5))); // expected-note {{function has been explicitly marked sentinel here}}
 void foo7 (int x, ...) __attribute__ ((__sentinel__(0))); // expected-note {{function has been explicitly marked sentinel here}}
 void foo10 (int x, ...) __attribute__ ((__sentinel__(1,1)));
 void foo12 (int x, ... ) ATTR; // expected-note {{function has been explicitly marked sentinel here}}
 
+#define FOOMACRO(...) foo1(__VA_ARGS__)
+
 void test1() {
   foo1(1, NULL); // OK
   foo1(1, 0) ; // expected-warning {{missing sentinel in function call}}
@@ -30,6 +32,9 @@ void test1() {
   struct A a, b, c;
   foo1(3, &a, &b, &c); // expected-warning {{missing sentinel in function call}}
   foo1(3, &a, &b, &c, (struct A*) 0);
+
+  // PR11002
+  FOOMACRO(1, 2); // expected-warning {{missing sentinel in function call}}
 }