diff options
author | Francois Pichet <pichet2000@gmail.com> | 2010-12-20 03:51:03 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2010-12-20 03:51:03 +0000 |
commit | 9dddd40a1caf45695ec94c5f5c46a23461c2bf47 (patch) | |
tree | 2d852c11d3e86d245ced04bbedbf0571d4df6734 /clang/test | |
parent | 660bce67f31a1b45eaee55ce0cad440b61ac5b6b (diff) | |
download | bcm5719-llvm-9dddd40a1caf45695ec94c5f5c46a23461c2bf47.tar.gz bcm5719-llvm-9dddd40a1caf45695ec94c5f5c46a23461c2bf47.zip |
Emit an error if operator __uuidof() is called on a type with no associated GUID.
llvm-svn: 122226
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Parser/MicrosoftExtensions.c | 46 | ||||
-rw-r--r-- | clang/test/Parser/MicrosoftExtensions.cpp | 48 |
2 files changed, 49 insertions, 45 deletions
diff --git a/clang/test/Parser/MicrosoftExtensions.c b/clang/test/Parser/MicrosoftExtensions.c index 98c86253f76..9df8fa3a4e9 100644 --- a/clang/test/Parser/MicrosoftExtensions.c +++ b/clang/test/Parser/MicrosoftExtensions.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple i386-mingw32 -fsyntax-only -verify -fms-extensions -Wno-unused-value -Wno-missing-declarations -x objective-c++ %s +// RUN: %clang_cc1 -triple i386-mingw32 -fsyntax-only -verify -fms-extensions -Wno-missing-declarations -x objective-c++ %s __stdcall int func0(); int __stdcall func(); typedef int (__cdecl *tptr)(); @@ -43,51 +43,9 @@ char x = FOO(a); typedef enum E { e1 }; -void uuidof_test1() -{ - __uuidof(0); // expected-error {{you need to include <guiddef.h> before using the '__uuidof' operator}} -} - -typedef struct _GUID -{ - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; -} GUID; - -struct __declspec(uuid(L"00000000-0000-0000-1234-000000000047")) uuid_attr_bad1 { };// expected-error {{'uuid' attribute requires parameter 1 to be a string}} -struct __declspec(uuid(3)) uuid_attr_bad2 { };// expected-error {{'uuid' attribute requires parameter 1 to be a string}} -struct __declspec(uuid("0000000-0000-0000-1234-0000500000047")) uuid_attr_bad3 { };// expected-error {{uuid attribute contains a malformed GUID}} -struct __declspec(uuid("0000000-0000-0000-Z234-000000000047")) uuid_attr_bad4 { };// expected-error {{uuid attribute contains a malformed GUID}} -struct __declspec(uuid("000000000000-0000-1234-000000000047")) uuid_attr_bad5 { };// expected-error {{uuid attribute contains a malformed GUID}} +
-struct __declspec(uuid("00000000-0000-0000-3231-000000000046")) A { }; -struct __declspec(uuid("{00000000-0000-0000-1234-000000000047}")) B { }; -class C {}; - -void uuidof_test2() -{ - A* a = new A; - B b; - __uuidof(A); - __uuidof(*a); - __uuidof(B); - __uuidof(&b); - _uuidof(0); - - // FIXME, this must not compile - _uuidof(1); - // FIXME, this must not compile - _uuidof(C); - - C c; - // FIXME, this must not compile - _uuidof(c); - - &_uuidof(0); -} /* Microsoft attribute tests */ [repeatable][source_annotation_attribute( Parameter|ReturnValue )] diff --git a/clang/test/Parser/MicrosoftExtensions.cpp b/clang/test/Parser/MicrosoftExtensions.cpp index e55e74cb839..ef4a3f6d784 100644 --- a/clang/test/Parser/MicrosoftExtensions.cpp +++ b/clang/test/Parser/MicrosoftExtensions.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -fsyntax-only -Wmicrosoft -verify -fms-extensions +// RUN: %clang_cc1 %s -fsyntax-only -Wno-unused-value -Wmicrosoft -verify -fms-extensions /* Microsoft attribute tests */ [repeatable][source_annotation_attribute( Parameter|ReturnValue )] @@ -23,3 +23,49 @@ extern "C" { } +void uuidof_test1() +{ + __uuidof(0); // expected-error {{you need to include <guiddef.h> before using the '__uuidof' operator}} +} + +typedef struct _GUID +{ + unsigned long Data1; + unsigned short Data2; + unsigned short Data3; + unsigned char Data4[8]; +} GUID; + +struct __declspec(uuid(L"00000000-0000-0000-1234-000000000047")) uuid_attr_bad1 { };// expected-error {{'uuid' attribute requires parameter 1 to be a string}} +struct __declspec(uuid(3)) uuid_attr_bad2 { };// expected-error {{'uuid' attribute requires parameter 1 to be a string}} +struct __declspec(uuid("0000000-0000-0000-1234-0000500000047")) uuid_attr_bad3 { };// expected-error {{uuid attribute contains a malformed GUID}} +struct __declspec(uuid("0000000-0000-0000-Z234-000000000047")) uuid_attr_bad4 { };// expected-error {{uuid attribute contains a malformed GUID}} +struct __declspec(uuid("000000000000-0000-1234-000000000047")) uuid_attr_bad5 { };// expected-error {{uuid attribute contains a malformed GUID}} + + + +struct __declspec(uuid("000000A0-0000-0000-C000-000000000046")) +struct_with_uuid { }; +struct struct_without_uuid { }; + + +int uuid_sema_test() +{ + struct_with_uuid var_with_uuid[1]; + struct_without_uuid var_without_uuid[1]; + + __uuidof(struct_with_uuid); + __uuidof(struct_without_uuid); // expected-error {{cannot call operator __uuidof on a type with no GUID}} + __uuidof(struct_with_uuid*); + __uuidof(struct_without_uuid*); // expected-error {{cannot call operator __uuidof on a type with no GUID}} + + __uuidof(var_with_uuid); + __uuidof(var_without_uuid);// expected-error {{cannot call operator __uuidof on a type with no GUID}} + __uuidof(var_with_uuid[1]); + __uuidof(var_without_uuid[1]);// expected-error {{cannot call operator __uuidof on a type with no GUID}} + __uuidof(&var_with_uuid[1]); + __uuidof(&var_without_uuid[1]);// expected-error {{cannot call operator __uuidof on a type with no GUID}} + + __uuidof(0); + __uuidof(1);// expected-error {{cannot call operator __uuidof on a type with no GUID}} +} |