[PATCH] D32092: Attribute inline
Zahira Ammarguellat via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 14 11:47:41 PDT 2017
zahiraam created this revision.
Added support for attribute inline for a __declspec declaration.
https://reviews.llvm.org/D32092
Files:
include/clang/Basic/Attr.td
lib/Parse/ParseDecl.cpp
lib/Sema/SemaDeclAttr.cpp
test/Sema/declspec-inline.c
test\Sema\declspec-inline.c
Index: lib/Parse/ParseDecl.cpp
===================================================================
--- lib/Parse/ParseDecl.cpp
+++ lib/Parse/ParseDecl.cpp
@@ -639,7 +639,10 @@
// else is a malformed declspec.
bool IsString = Tok.getKind() == tok::string_literal;
if (!IsString && Tok.getKind() != tok::identifier &&
- Tok.getKind() != tok::kw_restrict) {
+ Tok.getKind() != tok::kw_restrict &&
+ (Tok.getKind() != tok::kw_inline ||
+ (Tok.getKind() == tok::kw_inline &&
+ getLangOpts().CPlusPlus) ) ){
Diag(Tok, diag::err_ms_declspec_type);
T.skipToEnd();
return;
Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp
+++ lib/Sema/SemaDeclAttr.cpp
@@ -4377,7 +4377,7 @@
static void handleGNUInlineAttr(Sema &S, Decl *D, const AttributeList &Attr) {
FunctionDecl *Fn = cast<FunctionDecl>(D);
- if (!Fn->isInlineSpecified()) {
+ if (!Fn->isInlineSpecified() && !Attr.isDeclspecAttribute()) {
S.Diag(Attr.getLoc(), diag::warn_gnu_inline_attribute_requires_inline);
return;
}
Index: include/clang/Basic/Attr.td
===================================================================
--- include/clang/Basic/Attr.td
+++ include/clang/Basic/Attr.td
@@ -866,7 +866,7 @@
}
def GNUInline : InheritableAttr {
- let Spellings = [GCC<"gnu_inline">];
+ let Spellings = [GCC<"gnu_inline">, Declspec<"inline">];
let Subjects = SubjectList<[Function]>;
let Documentation = [Undocumented];
}
Index: test/Sema/declspec-inline.c
===================================================================
--- test/Sema/declspec-inline.c
+++ test/Sema/declspec-inline.c
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -verify -fms-compatibility %s
+// expected-no-diagnostics
+
+static int __declspec(inline) foo(int i) {
+ int k;
+ int a[10000];
+ for (k=0; k<=i; k++)
+ {
+ a[k] = a[k]*k;
+ }
+ return a[k];
+}
+
+int main()
+{
+ int i=20;
+ return foo(2000);
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32092.95328.patch
Type: text/x-patch
Size: 2075 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170414/1e9905ee/attachment.bin>
More information about the cfe-commits
mailing list