Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td	(revision 186942)
+++ include/clang/Basic/DiagnosticSemaKinds.td	(working copy)
@@ -1853,8 +1853,6 @@
   "field may not be qualified with an address space">;
 def err_attr_objc_ownership_redundant : Error<
   "the type %0 is already explicitly ownership-qualified">;
-def err_attribute_not_string : Error<
-  "argument to %0 attribute was not a string literal">;
 def err_undeclared_nsnumber : Error<
   "NSNumber must be available to use Objective-C literals">;
 def err_invalid_nsnumber_type : Error<
Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp	(revision 186944)
+++ lib/Sema/SemaDeclAttr.cpp	(working copy)
@@ -1687,7 +1687,8 @@
 
   // Check that it is a string.
   if (!Str) {
-    S.Diag(Attr.getLoc(), diag::err_attribute_not_string) << "tls_model";
+    S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type)
+      << Attr.getName() << 1 /*arg #*/ << ArgumentString;
     return;
   }
 
@@ -2060,8 +2061,9 @@
   if (NumArgs == 1) {
     StringLiteral *SE = dyn_cast<StringLiteral>(Attr.getArg(0));
     if (!SE) {
-      S.Diag(Attr.getArg(0)->getLocStart(), diag::err_attribute_not_string)
-        << Attr.getName();
+      S.Diag(Attr.getArg(0)->getLocStart(),
+             diag::err_attribute_argument_n_type) << Attr.getName()
+        << 1 /*arg #*/ << ArgumentString;
       return;
     }
     Str = SE->getString();
@@ -2884,7 +2886,8 @@
   Expr *ArgExpr = Attr.getArg(0);
   StringLiteral *SE = dyn_cast<StringLiteral>(ArgExpr);
   if (!SE) {
-    S.Diag(ArgExpr->getLocStart(), diag::err_attribute_not_string) << "section";
+    S.Diag(ArgExpr->getLocStart(), diag::err_attribute_argument_n_type)
+      << Attr.getName() << 1 /*arg #*/ << ArgumentString;
     return;
   }
 
@@ -3419,7 +3422,8 @@
   // Make sure that there is a string literal as the annotation's single
   // argument.
   if (!SE) {
-    S.Diag(ArgExpr->getLocStart(), diag::err_attribute_not_string) <<"annotate";
+    S.Diag(ArgExpr->getLocStart(), diag::err_attribute_argument_n_type)
+      << Attr.getName() << 1 /*arg #*/ << ArgumentString;
     return;
   }
 
Index: test/Sema/annotate.c
===================================================================
--- test/Sema/annotate.c	(revision 186939)
+++ test/Sema/annotate.c	(working copy)
@@ -1,8 +1,8 @@
 // RUN: %clang_cc1 %s -fsyntax-only -verify
 
-void __attribute__((annotate("foo"))) foo(float *a) { 
+void __attribute__((annotate("foo"))) foo(float *a) {
   __attribute__((annotate("bar"))) int x;
-  __attribute__((annotate(1))) int y; // expected-error {{argument to annotate attribute was not a string literal}}
+  __attribute__((annotate(1))) int y; // expected-error {{'annotate' attribute requires parameter 1 to be a string}}
   __attribute__((annotate("bar", 1))) int z; // expected-error {{attribute takes one argument}}
   int u = __builtin_annotation(z, (char*) 0); // expected-error {{second argument to __builtin_annotation must be a non-wide string constant}}
   int v = __builtin_annotation(z, (char*) L"bar"); // expected-error {{second argument to __builtin_annotation must be a non-wide string constant}}
Index: test/Sema/attr-section.c
===================================================================
--- test/Sema/attr-section.c	(revision 186939)
+++ test/Sema/attr-section.c	(working copy)
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -verify -fsyntax-only -triple x86_64-apple-darwin9 %s
 
 int x __attribute__((section(
-   42)));  // expected-error {{argument to section attribute was not a string literal}}
+   42)));  // expected-error {{'section' attribute requires parameter 1 to be a string}}
 
 
 // rdar://4341926
Index: test/Sema/attr-tls_model.c
===================================================================
--- test/Sema/attr-tls_model.c	(revision 186939)
+++ test/Sema/attr-tls_model.c	(working copy)
@@ -10,5 +10,5 @@
 static __thread int y __attribute((tls_model("global-dynamic"))); // no-warning
 
 static __thread int y __attribute((tls_model("local", "dynamic"))); // expected-error {{attribute takes one argument}}
-static __thread int y __attribute((tls_model(123))); // expected-error {{argument to tls_model attribute was not a string literal}}
+static __thread int y __attribute((tls_model(123))); // expected-error {{'tls_model' attribute requires parameter 1 to be a string}}
 static __thread int y __attribute((tls_model("foobar"))); // expected-error {{tls_model must be "global-dynamic", "local-dynamic", "initial-exec" or "local-exec"}}
