]> granicus.if.org Git - clang/commitdiff
Fix a crash with __flaot128 noticed by Eli.
authorNico Weber <nicolasweber@gmx.de>
Thu, 20 Jun 2013 23:30:30 +0000 (23:30 +0000)
committerNico Weber <nicolasweber@gmx.de>
Thu, 20 Jun 2013 23:30:30 +0000 (23:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184498 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/Sema/128bitfloat.cc

index 870e09cc674ab8c7802d3aa1631d6df14c5625ac..f91182b9bd5b63408c6d783f2396b19724d9457b 100644 (file)
@@ -859,12 +859,12 @@ TypedefDecl *ASTContext::getUInt128Decl() const {
 
 TypeDecl *ASTContext::getFloat128StubType() const {
   if (!Float128StubDecl) {
-    Float128StubDecl = RecordDecl::Create(const_cast<ASTContext &>(*this), 
-                                          TTK_Struct,
-                                          getTranslationUnitDecl(),
-                                          SourceLocation(),
-                                          SourceLocation(),
-                                          &Idents.get("__float128"));
+    Float128StubDecl = CXXRecordDecl::Create(const_cast<ASTContext &>(*this), 
+                                             TTK_Struct,
+                                             getTranslationUnitDecl(),
+                                             SourceLocation(),
+                                             SourceLocation(),
+                                             &Idents.get("__float128"));
   }
   
   return Float128StubDecl;
index 077e61a51d41ca7a18da5e05d4d4f82ab742ac78..cb76dac96001d73723177320f21a0b4d32e8bfb4 100644 (file)
@@ -2,12 +2,23 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 
 #if !defined(__STRICT_ANSI__)
-__float128 f;  // expected-error{{support for type '__float128' is not yet implemented}}
+__float128 f;  // expected-error {{support for type '__float128' is not yet implemented}}
 // But this should work:
 template<typename> struct __is_floating_point_helper {};
 template<> struct __is_floating_point_helper<__float128> {};
+
+// FIXME: This could have a better diag.
+void g(int x, __float128 *y) {
+  x + *y;  // expected-error {{invalid operands to binary expression ('int' and '__float128')}}
+}
+
 #else
 __float128 f;  // expected-error {{unknown type name '__float128'}}
 template<typename> struct __is_floating_point_helper {};
 template<> struct __is_floating_point_helper<__float128> {};  // expected-error {{use of undeclared identifier '__float128'}}
+
+void g(int x, __float128 *y) {  // expected-error {{unknown type name '__float128'}}
+  x + *y;
+}
+
 #endif