aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/internal.h1
-rw-r--r--libcpp/lex.cc10
2 files changed, 9 insertions, 2 deletions
diff --git a/libcpp/internal.h b/libcpp/internal.h
index ad4e590..5f4d9cb 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -85,6 +85,7 @@ struct dummy
{
double d;
int *p;
+ location_t l;
} u;
};
diff --git a/libcpp/lex.cc b/libcpp/lex.cc
index 849447e..858970b 100644
--- a/libcpp/lex.cc
+++ b/libcpp/lex.cc
@@ -4997,7 +4997,8 @@ _cpp_aligned_alloc (cpp_reader *pfile, size_t len)
void *
_cpp_commit_buff (cpp_reader *pfile, size_t size)
{
- void *ptr = BUFF_FRONT (pfile->a_buff);
+ const auto buff = pfile->a_buff;
+ void *ptr = BUFF_FRONT (buff);
if (pfile->hash_table->alloc_subobject)
{
@@ -5006,7 +5007,12 @@ _cpp_commit_buff (cpp_reader *pfile, size_t size)
ptr = copy;
}
else
- BUFF_FRONT (pfile->a_buff) += size;
+ {
+ BUFF_FRONT (buff) += size;
+ /* Make sure the remaining space is maximally aligned for whatever this
+ buffer holds next. */
+ BUFF_FRONT (buff) += BUFF_ROOM (buff) % DEFAULT_ALIGNMENT;
+ }
return ptr;
}