Files
loongoffice/compilerplugins/clang
Stephan Bergmann 629765804a Work around problems with isCXX11ConstantExpr in template code
> template<size_t Size>
> bool checkOutput(ScDocument* pDoc, const ScRange& aOutRange, const char* aOutputCheck[][Size], const char* pCaption)
> {
>     ...
>             const char* p = aOutputCheck[nRow][nCol];

in sc/qa/unit/helper/qahelper.hxx caused

>    assert(E->isRValue() && E->getType()->hasPointerRepresentation());

in Clang's EvaluatePointer (lib/AST/ExprConstant.cpp) to fire.  In the template
definition itself, Clang doesn't introduce ArrayToPointerDecay ImplicitCastExpr
into the subscripting operations (while in any implicit specializations that it
instantiates, it does).

This is interesting:  Up to C++11, [expr.sub] requires the operator to have
pointer type (so array-to-pointer decay is clearly asked for).  In C++14
(CWG1213), the operator can also be of array type but it is not explicitly
specified whether array-to-pointer decay is to be performed.  In upcoming C++17
(P0135R1), it specifies further that an operator of array type must be a glvalue
but still does not explicitly specify whether array-to-pointer decay is to be
performed.  Maybe the definition of the subscripting operation in terms of
*((E1)+(E2)) is meant to imply that, however.

Change-Id: I67c7b0f34002387dbf746288630371877c6261ef
2017-01-10 14:35:05 +01:00
..
2017-01-09 15:44:47 +01:00
2016-06-29 09:15:25 +02:00
2017-01-06 18:15:24 +01:00
2016-12-01 23:42:09 +01:00
2016-09-30 06:57:26 +00:00
2016-10-01 20:10:06 +00:00
2017-01-09 15:44:47 +01:00
2016-11-16 09:10:16 +00:00
2016-10-03 13:43:44 +00:00
2016-06-29 09:15:25 +02:00
2016-12-01 23:42:09 +01:00
2016-06-29 09:15:25 +02:00
2016-10-12 08:49:35 +02:00
2017-01-10 08:12:52 +01:00
2016-11-04 09:20:49 +01:00