diff options
-rw-r--r-- | include/clang/AST/Expr.h | 6 | ||||
-rw-r--r-- | lib/AST/Expr.cpp | 15 |
2 files changed, 12 insertions, 9 deletions
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index e28ef97579..c6e0a2ce00 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -4037,9 +4037,9 @@ public: void setDesignators(ASTContext &C, const Designator *Desigs, unsigned NumDesigs); - Expr *getArrayIndex(const Designator& D); - Expr *getArrayRangeStart(const Designator& D); - Expr *getArrayRangeEnd(const Designator& D); + Expr *getArrayIndex(const Designator &D) const; + Expr *getArrayRangeStart(const Designator &D) const; + Expr *getArrayRangeEnd(const Designator &D) const; /// @brief Retrieve the location of the '=' that precedes the /// initializer value itself, if present. diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 6888c46ae4..74ef46ff75 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -3729,27 +3729,30 @@ SourceLocation DesignatedInitExpr::getLocEnd() const { return getInit()->getLocEnd(); } -Expr *DesignatedInitExpr::getArrayIndex(const Designator& D) { +Expr *DesignatedInitExpr::getArrayIndex(const Designator& D) const { assert(D.Kind == Designator::ArrayDesignator && "Requires array designator"); - char* Ptr = static_cast<char*>(static_cast<void *>(this)); + char *Ptr = static_cast<char *>( + const_cast<void *>(static_cast<const void *>(this))); Ptr += sizeof(DesignatedInitExpr); Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr)); return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 1)); } -Expr *DesignatedInitExpr::getArrayRangeStart(const Designator& D) { +Expr *DesignatedInitExpr::getArrayRangeStart(const Designator &D) const { assert(D.Kind == Designator::ArrayRangeDesignator && "Requires array range designator"); - char* Ptr = static_cast<char*>(static_cast<void *>(this)); + char *Ptr = static_cast<char *>( + const_cast<void *>(static_cast<const void *>(this))); Ptr += sizeof(DesignatedInitExpr); Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr)); return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 1)); } -Expr *DesignatedInitExpr::getArrayRangeEnd(const Designator& D) { +Expr *DesignatedInitExpr::getArrayRangeEnd(const Designator &D) const { assert(D.Kind == Designator::ArrayRangeDesignator && "Requires array range designator"); - char* Ptr = static_cast<char*>(static_cast<void *>(this)); + char *Ptr = static_cast<char *>( + const_cast<void *>(static_cast<const void *>(this))); Ptr += sizeof(DesignatedInitExpr); Stmt **SubExprs = reinterpret_cast<Stmt**>(reinterpret_cast<void**>(Ptr)); return cast<Expr>(*(SubExprs + D.ArrayOrRange.Index + 2)); |