On Thu, Jun 20, 2013 at 3:10 PM, Eli Friedman <[email protected]>wrote:
> On Thu, Jun 20, 2013 at 2:46 PM, Nico Weber <[email protected]> wrote: > >> On Thu, Jun 20, 2013 at 2:29 PM, Eli Friedman <[email protected]>wrote: >> >>> On Thu, Jun 20, 2013 at 2:25 PM, Nico Weber <[email protected]> wrote: >>> >>>> Thanks for the quick review! >>>> >>>> On Thu, Jun 20, 2013 at 2:02 PM, Eli Friedman >>>> <[email protected]>wrote: >>>> >>>>> On Thu, Jun 20, 2013 at 1:45 PM, Nico Weber <[email protected]>wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> the attached patch lazily inserts a __float128 type the first time >>>>>> one is looked up. This is needed to compile libstdc++4.7+ headers in >>>>>> -std=gnu++11 mode. This fixes PR13530, see that bug for more information. >>>>>> >>>>>> Ok? >>>>>> >>>>> >>>>> Is there any particular reason you're checking for GNUMode? >>>>> >>>> >>>> Yes, type_traits only adds __is_floating_pointer_helper<__float128> if >>>> __STRICT_ANSI__ isn't defined. InitPreprocessor.cpp defines this exactly if >>>> !GNUMode. I changed the test to check for __STRICT_ANSI__ to maybe make >>>> this a bit clearer. >>>> >>>> >>>>> "variable has incomplete type '__float128'" is a terrible error >>>>> message if someone actually tries to use __float128 with clang. Can we do >>>>> better? >>>>> >>>> >>>> We can, attached. >>>> >>>> >>>> >>> Not sure if this catches all cases, but it's probably good enough. >>> >>> Otherwise, looks fine. >>> >> >> r184476, thanks! >> >> I looked through a few diags in DiagnosticSemaKind mentioning "incomplete >> type", and the ones I checked all go through RequireCompleteType (I checked >> err_incomplete_type err_typecheck_decl_incomplete_type >> err_invalid_incomplete_type_use err_bad_dynamic_cast_incomplete >> err_incomplete_typeid err_new_incomplete_type warn_delete_incomplete >> err_catch_incomplete_ptr err_catch_incomplete_ref err_throw_incomplete >> err_throw_incomplete_ptr err_incomplete_object_call) >> >> >> > We pretty consistently go through RequireCompleteType, yes. I was more > worried about something like "x + *y", where y is a __float128*; I don't > think we actually use RequireCompleteType to produce a diagnostic in that > case. > Just checked; the following crashes with your patch: void f(int x, __float128*y) { x+*y; } =Eli
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
