зеркало из https://github.com/microsoft/clang-1.git
Turned on support for __declspecs: noreturn, noinline, nothrow and naked in MS compatibility mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151295 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
97df54e0c0
Коммит
9428772f16
|
@ -3463,10 +3463,19 @@ static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D,
|
|||
}
|
||||
|
||||
static bool isKnownDeclSpecAttr(const AttributeList &Attr) {
|
||||
return Attr.getKind() == AttributeList::AT_dllimport ||
|
||||
Attr.getKind() == AttributeList::AT_dllexport ||
|
||||
Attr.getKind() == AttributeList::AT_uuid ||
|
||||
Attr.getKind() == AttributeList::AT_deprecated;
|
||||
switch (Attr.getKind()) {
|
||||
default:
|
||||
return false;
|
||||
case AttributeList::AT_dllimport:
|
||||
case AttributeList::AT_dllexport:
|
||||
case AttributeList::AT_uuid:
|
||||
case AttributeList::AT_deprecated:
|
||||
case AttributeList::AT_noreturn:
|
||||
case AttributeList::AT_nothrow:
|
||||
case AttributeList::AT_naked:
|
||||
case AttributeList::AT_noinline:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// RUN: %clang_cc1 -triple i386-pc-win32 %s -emit-llvm -fms-compatibility -o - | FileCheck %s
|
||||
|
||||
// CHECK: define void @t3() nounwind noinline naked {
|
||||
__declspec(naked) void t3() {}
|
||||
|
||||
// CHECK: define void @t22() nounwind
|
||||
void __declspec(nothrow) t22();
|
||||
void t22() {}
|
||||
|
||||
// CHECK: define void @t2() nounwind noinline {
|
||||
__declspec(noinline) void t2() {}
|
||||
|
||||
// CHECK: call void @f20_t()
|
||||
// CHECK: noreturn
|
||||
__declspec(noreturn) void f20_t(void);
|
||||
void f20(void) { f20_t(); }
|
|
@ -10,3 +10,7 @@ enum ENUM2 {
|
|||
ENUM2_b = 0x9FFFFFFF, // expected-warning {{enumerator value is not representable in the underlying type 'int'}}
|
||||
ENUM2_c = 0x100000000 // expected-warning {{enumerator value is not representable in the underlying type 'int'}}
|
||||
};
|
||||
|
||||
__declspec(noreturn) void f6( void ) {
|
||||
return; // expected-warning {{function 'f6' declared 'noreturn' should not return}}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче